0

假设有两个抽象文档对应JTextFields(两个JTextFields是不同的变量)。

假设用户在 JtextField1(文档 A)中输入数值,它应该在运行时相应地更新另一个 JTextField2(文档 B)。如果用户在同一程序运行时在 JTextField2(Document B) 中输入数值也是如此,它应该更新 JTextField1(Document A)。

我尝试通过使用 Document Listener 来解决这个问题,但是,它仅适用于在运行时更新一个文档(A 更新 B 或反之亦然),而不是两者(或准确地说是彼此),因为它提供了死锁。我应该使用 DocumentFilter 来解决这个问题吗?不过,我不知道如何将它应用于这种情况。我尝试通过使用 FocusListeners 并在字段不在焦点时禁用 DocumentListener 来避免死锁/写锁定问题,但这是一种非常幼稚的方法,因为它完全不处理线程(如果这是问题的话)。选择另一个字段时创建一个单独的线程就足够了吗?不过,我对多线程没有真正的了解。我将不胜感激有关此问题的某种建议。

代码: http: //pastebin.com/qqYPXcAf

我正在尝试重新创建 photoshop 的类似 GUI 功能,以像素为单位更新宽度/高度大小,以便在用户输入的运行时保持 AR(图片: http: //puu.sh/9L07v/c745e85867.png

4

1 回答 1

2

我应该使用 DocumentFilter 来解决这个问题吗?

一个更简单的解决方案是只共享文档:

JTextField textField1 = new JTextField(...);
JTextField textField2 = new JTextField(...);
textField2.setDocument( textField1.getDocument() );

或者,如果您的代码正在执行某种计算以使两个值不同,那么您可以删除 DocumentListener 以避免循环。所以 textField2 上监听器的基本代码是:

textField1.getDocument().removeDocumentListener(...);
textField1.setText( ... );
textField1.addDocumentListener(...);

所以知道当你更新文本字段一中的文本时,它不会通知 textField2。

于 2014-06-25T19:05:09.710 回答