我有一个主要课程,我有TextArea显示我的程序的一些日志。它看起来像这样:
@FXML
private TextArea eventLog;
我需要从其他classess(场景)访问它,所以它与StringProperty绑定如下:
eventLog.textProperty().bind(LogInfo.logDataProperty());
LogInfo如下所示:
public class LogInfo {
private static StringProperty logData = new SimpleStringProperty();
public static void setLogData(String data) {
logData.set(getLogData() + data);
}
}
setLogData基本上复制已存储在TextArea eventLog上并添加新行的所有信息。它工作正常,但问题出现了:
显示新信息时,TextArea不会滚动。我需要将ChangeListener添加到我的eventLog textArea中,如下所示:
eventLog.textProperty().addListener(new ChangeListener<Object>() {
@Override
public void changed(ObservableValue<?> observable, Object oldValue,
Object newValue) {
eventLog.setScrollTop(Double.MAX_VALUE);
}
});
它不起作用,因为信息是由LogInfo类中的setLogData添加的,而不是直接来自eventLog TextArea。所以我需要在我的LogInfo类上实现ChangeListener,但问题是我无法从LogInfo类控制eventLog TextArea。有没有办法从这个类中做出类似反向绑定的东西?
答案 0 :(得分:1)
您需要对属性see this older post进行双向绑定,以获取更多信息。
答案 1 :(得分:1)
将侦听器直接绑定到LogInfo
属性,而不是将其绑定到TextArea
属性:
Main.logDataProperty().addListener((observable, oldValue, newValue) -> {
textArea.setScrollTop(Double.MAX_VALUE);
});