从另一个java文件在java中追加文本区域

从另一个java文件在java中追加文本区域,java,swing,user-interface,textarea,jtextarea,Java,Swing,User Interface,Textarea,Jtextarea,这是我的FrameGUI public FrameGUI(String title) { super(title); setLayout(new BorderLayout()); final JTextArea textArea = new JTextArea(); // ***** detailsPanel = new DetailsPanel(); Container c = getContentPane(

这是我的FrameGUI

public FrameGUI(String title) {
        super(title);
        setLayout(new BorderLayout());

        final JTextArea textArea = new JTextArea();  //  *****
        detailsPanel = new DetailsPanel();
        Container c = getContentPane();
        c.add(textArea, BorderLayout.CENTER);
        c.add(detailsPanel, BorderLayout.NORTH);
    }
我想从其他类更新此textArea。现在我正在输出到控制台,但我想附加文本区域而不是这个。通过添加一个按钮和一个事件处理程序,我可以很容易地在这个类中附加它,但我想从另一个发生不同进程的类中执行


感谢您的帮助。

您的问题不是特定于Swing或GUI的,而是更一般的Java问题的一部分:

一个类的对象如何更改另一个类的对象的字段状态

一种方法是使用setter方法。例如,您可以为保存JTextArea的类提供一个公共方法,该方法将为其他类提供这样做的能力

比如说,

// assuming the class holds a descriptionArea 
// JTextArea field
public void appendToDescriptionArea(String text) {
  descriptionArea.append(text);
}
通过这种方式,JTextArea字段可以保持私有,但是其他持有对持有该字段的显示GUI的有效引用的类可以调用此方法并更新JTextArea的文本。请注意,一个常见的错误是为希望添加文本的类提供一个新的、完全唯一的引用,以引用包含JTextArea的类,但如果这样做,则会设置未显示的GUI文本。因此,请确保在正确的可视化实例上调用此方法


如果这个答案不能帮助你解决你的问题,那么就考虑发布更多有关所涉及的类的信息,包括相关的代码和背景信息。你能给我们的信息越具体、越有用,通常我们能给你的答案就越具体、越有用


编辑
关于这一错误:

“无法解析textArea”

该代码:

public FrameGUI(String title) {
  super(title);
  setLayout(new BorderLayout());

  final JTextArea textArea = new JTextArea();  //  *****
  detailsPanel = new DetailsPanel();
  Container c = getContentPane();
  c.add(textArea, BorderLayout.CENTER);
  c.add(detailsPanel, BorderLayout.NORTH);
}
这里的问题是,您在FrameGUI的构造函数中声明textArea变量,而在这样做时,变量的可见性或“范围”仅限于此构造函数。在构造函数之外,它不存在并且不能使用

解决方案是在构造函数外部声明textArea变量,使其成为类的字段。e、 g.,:

public class FrameGUI extends JFrame { // I'm not a fan of extending JFrames.
    // this variable is now visible throughout the class    
    private JTextArea textArea = new JTextArea(15, 40); // 15 rows, 40 columns

    public FrameGUI(String title) {
      super(title);
      setLayout(new BorderLayout());

      // final JTextArea textArea = new JTextArea();  //  *** commented out
      detailsPanel = new DetailsPanel();

      Container c = getContentPane();
      c.add(new JScrollPane(textArea), BorderLayout.CENTER); // put textarea into a scrollpane
      c.add(detailsPanel, BorderLayout.NORTH);
    }

    public void appendToTextArea(String text) {
      textArea.append(text);
    }

我曾尝试将上述代码添加到我的文件中,但现在我得到了“textArea无法解析”@Kal:那么你必须在原始问题中发布相关代码,包括如何以及在何处声明JTextArea,该方法用于让其他类能够追加文本,如何获取对第二个类中包含JTextArea的类的引用,以及如何尝试调用上述方法。同时发布所有完整的错误和异常消息。此附加信息将帮助我们更好地了解您的问题。祝你好运!好的,我已经更新了更多的代码,希望我的问题现在有意义了。谢谢你的帮助。@Kal:不客气,祝你学习Java好运@Kal:关于正确的同步,请参见本节。