Java 如何从一个jframe到另一个jframe访问jtextarea
我有2个jframes。在1个jframes中,我在jtextarea中提供输入,它应该显示在另一个jframe jtextarea中。我如何获得它。 我使用netbeans,我使用swing设计了jframes。Java 如何从一个jframe到另一个jframe访问jtextarea,java,swing,jframe,Java,Swing,Jframe,我有2个jframes。在1个jframes中,我在jtextarea中提供输入,它应该显示在另一个jframe jtextarea中。我如何获得它。 我使用netbeans,我使用swing设计了jframes。 有人能帮我吗。下面的代码也许比前面任何神秘的解释都能更好地说明这一点:) 理想情况下,可以使用公共方法在TargetFrame中设置文本,并在其他地方实现侦听器,这样两个框架都不需要引用另一个框架。正确的方法是使用(也称为侦听器)。一般来说,两个主框架不应该知道从属框架。它应该提供一
有人能帮我吗。下面的代码也许比前面任何神秘的解释都能更好地说明这一点:)
理想情况下,可以使用公共方法在TargetFrame中设置文本,并在其他地方实现侦听器,这样两个框架都不需要引用另一个框架。正确的方法是使用(也称为侦听器)。一般来说,两个主框架不应该知道从属框架。它应该提供一种通知感兴趣的人的方式。因此,在代码中:
public class SourceFrame extends JFrame {
private final JTextArea sourceArea = new JTextArea();
private TargetFrame targetFrame; // somehow set this one
public void addTextChangeKeyListener(KeyListener listener) {
sourceArea.addKeyListener(listener);
}
// a method to remove the listener might be required as well
}
然后在TargetFrame中订阅源文本区域中发生的关键事件:
public class TargetFrame extends JFrame {
private final JTextArea targetArea = new JTextArea();
private SourceFrame sourceFrame; // set this via constructor
// this is called on initialization, perhaps from the constructor.
// Check what NetBeans has generated
public void init() {
sourceFrame.addDocumentListener(new DocumentListener() {
public void changedUpdate(DocumentEvent event) {
Document doc = event.getDocument();
targetArea.setText(doc.getText(0, doc.getLength()));
}
public void insertUpdate(DocumentEvent event) {
Document doc = event.getDocument();
targetArea.setText(doc.getText(0, doc.getLength()));
}
public void removeUpdate(DocumentEvent event) {
Document doc = event.getDocument();
targetArea.setText(doc.getText(0, doc.getLength()));
}
}
}
e.getSource()
返回创建事件的组件。您可以在两个文本组件之间共享相同的文档实例:
thisTextArea.setDocument(thatTextArea.getDocument())
它们是在同一个VM中运行还是在不同的VM中运行?没有addDocumentListener这样的方法。此外,在这种情况下,这不是使用observer模式的适当方式哎呀,忘记了中间的getDocument()。至于代码,它并不是合适的,但更多的是简短的。那么,关于我的回答下面的“适当”语句,让我指出,我将考虑一个文档监听器一个有争议的事情,而在另一个类中的监听器在一个具体的JTestTaRa中无论如何都不是好主意。我们可以尝试一种折衷方案,采用您的体系结构和我的DocumentListener。DocumentEvent允许您获取文档,并从中检索文本,因此无需依赖所使用的文本组件的类型。OMG,有时由于所有这些树,它只是俯瞰森林。。。这才是真正应该做的,是的!
public class TargetFrame extends JFrame {
private final JTextArea targetArea = new JTextArea();
private SourceFrame sourceFrame; // set this via constructor
// this is called on initialization, perhaps from the constructor.
// Check what NetBeans has generated
public void init() {
sourceFrame.addDocumentListener(new DocumentListener() {
public void changedUpdate(DocumentEvent event) {
Document doc = event.getDocument();
targetArea.setText(doc.getText(0, doc.getLength()));
}
public void insertUpdate(DocumentEvent event) {
Document doc = event.getDocument();
targetArea.setText(doc.getText(0, doc.getLength()));
}
public void removeUpdate(DocumentEvent event) {
Document doc = event.getDocument();
targetArea.setText(doc.getText(0, doc.getLength()));
}
}
}