gpt4 book ai didi

JavaFX - 如何将 ChangeListener 添加到与其他类中的 StringProperty 绑定(bind)的 TextArea

转载 作者:行者123 更新时间:2023-11-30 03:32:33 25 4
gpt4 key购买 nike

我有一个主类,其中有 TextArea 显示我的程序的一些日志。它看起来像这样:

@FXML
private TextArea eventLog;

我需要从其他类(场景)访问它,因此它与 StringProperty 绑定(bind),如下所示:

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。有没有办法从这个类中制作类似反向绑定(bind)的东西?

最佳答案

将监听器直接绑定(bind)到 LogInfo 属性,而不是将其绑定(bind)到 TextArea 属性:

Main.logDataProperty().addListener((observable, oldValue, newValue) -> {
textArea.setScrollTop(Double.MAX_VALUE);
});

关于JavaFX - 如何将 ChangeListener 添加到与其他类中的 StringProperty 绑定(bind)的 TextArea,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28670394/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com