繁体   English   中英

如何使两个文档根据彼此的输入实时地相互更新?

[英]How to make two documents update each other during real time depending on each other input?

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

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

我尝试通过使用文档侦听器解决此问题,但是,它只能在运行时更新一个文档(A更新B或反之亦然)时起作用,而不能同时更新两个文档(准确地说是彼此更新),因为它提供了死锁。 我应该为这个问题使用DocumentFilter吗? 不过,我不知道如何将其应用于这种情况。 我尝试通过使用FocusListeners来避免死锁/写锁问题,并在该字段不处于焦点时禁用DocumentListener,但这是一种非常幼稚的方法,因为它完全不处理线程(如果这是问题)。 当选择其他字段时是否会创建一个单独的线程?我对多线程并不了解。 对于这个问题,我将提供一些建议。

代码: http//pastebin.com/qqYPXcAf

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

我应该为这个问题使用DocumentFilter吗?

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

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

或者,如果您的代码正在执行某种计算,以使两个值不同,则只需删除DocumentListener即可避免循环。 因此,textField2上侦听器的基本代码为:

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

因此,知道在更新文本字段1中的文本时,它不会通知textField2。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM