我有两个 swing ui 表单和一个模块,它们都会查看。
每个ui都在添加监听一个属性的变化
并在发生更改时更新自己的文本字段。
基本上 - 他们都应该更新模块并从中更新。 有没有一种简单的方法可以在没有绑定(bind)框架的情况下做到这一点
我是这样做的(但我一直在尝试在通知中改变)-
关于我的文本字段的更新
myTextField.getDocument().addDocumentListener(new TFDocumentListener() {
protected void userChangedTF() {
Float value = myTextField.getValue();
if (value != null) {
myObj.setMyAttribute(value);
}
}
});
仍在用户界面中 - 注册更改
myObj.addMyAttributeChangedListener(new ValueChangeListener<Float>() {
@Override public void valueChanged(Float value) {
if (!myTextField.isFocusOwner()) {
myTextField.setValueIn(value);
}
}
});
在模块中 - 当 setMyAttribute 发生时 - 它调用此函数
private void notifyIntervalChanged(float newValue) {
for (ValueChangeListener valueChangeListener : intervalChangedListenersList) {
valueChangeListener.valueChanged(newValue);
}
}
我宣布
public interface ValueChangeListener<T> {
void valueChanged(T Value)
}
最佳答案
如果您需要在监听器中更改同一 JTextComponent
的内容,请将更改(例如 setText())包装在 SwingUtilities.invokeLater()
关于java 尝试在通知中改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10005954/