从另一个java文件中添加java中的文本区域

时间:2014-03-15 12:46:36

标签: 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();
        c.add(textArea, BorderLayout.CENTER);
        c.add(detailsPanel, BorderLayout.NORTH);
    }

我想从其他类更新此textArea。现在我输出到控制台,但我想附加这个文本区域。我可以通过添加一个按钮和一个事件处理程序轻松地在这个类中添加它,但我想从另一个发生不同进程的类中进行此操作。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您的问题不是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);
    }