据说有两个抽象文档对应于JTextFields(两个JTextFields都是不同的变量)。
假设用户在JtextField1(文档A)中输入数值,它应该在运行时相应地更新另一个JTextField2(文档B)。如果用户在同一程序运行时在JTextField2(文档B)中输入数值,则应该更新,它应该更新JTextField1(文档A)。
我尝试使用Document Listener解决这个问题,但是,它只会在运行时更新一个文档(A更新B或反之亦然)而不是两者(或彼此精确),因为它提供了死锁。我应该使用DocumentFilter来解决这个问题吗?不过我怎么会在这种情况下应用它。我试图通过使用FocusListeners避免死锁/写锁定问题,并在字段不在焦点时禁用DocumentListener,但这是一种非常天真的方法,因为它完全不处理线程(如果这是问题)。选择其他字段时创建一个单独的线程是否足够?但我对多线程没有真正的了解。我希望对这个问题提出一些建议。
代码:http://pastebin.com/qqYPXcAf
我试图重新创建Photoshop的类似GUI功能,更新宽度/高度大小(以像素为单位),以便在运行时保持用户输入的AR(图片:http://puu.sh/9L07v/c745e85867.png)
答案 0 :(得分:2)
我应该使用DocumentFilter来解决这个问题吗?
更简单的解决方案是共享文档:
JTextField textField1 = new JTextField(...);
JTextField textField2 = new JTextField(...);
textField2.setDocument( textField1.getDocument() );
或者,如果您的代码正在进行某种计算,以便两个值不同,那么您可以删除DocumentListener以避免循环。所以textField2上的监听器的基本代码是:
textField1.getDocument().removeDocumentListener(...);
textField1.setText( ... );
textField1.addDocumentListener(...);
因此,知道何时更新文本字段中的文本,它将不会通知textField2。