我有一个主类,其中有TextArea,它显示程序的一些日志。看起来像这样:
@FXML
private TextArea eventLog;
我需要从其他类(场景)访问它,因此它与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);
}
});
这是行不通的,因为信息是通过setLogData从LogInfo类添加的,而不是直接从eventLog TextArea添加的。因此,我需要在LogInfo类上实现ChangeListener,但是问题是我无法从LogInfo类控制eventLog TextArea。有什么办法可以从此类中进行类似反向绑定的操作吗?
将侦听器直接绑定到LogInfo
属性,而不是将其绑定到TextArea
属性:
Main.logDataProperty().addListener((observable, oldValue, newValue) -> {
textArea.setScrollTop(Double.MAX_VALUE);
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句