gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 06:58:30 28 4
gpt4 key购买 nike

这是我的 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 问题的一部分:

How can an object of one class change the state of a field of an object of another class?

实现此目的的一种方法是使用 setter 方法。例如,您可以为保存 JTextArea 的类提供一个公共(public)方法,该方法将使其他类能够执行此操作。

例如,

// assuming the class holds a descriptionArea 
// JTextArea field
public void appendToDescriptionArea(String text) {
descriptionArea.append(text);
}

这样,JTextArea 字段可以保持私有(private),但是其他类持有对显示的 GUI 的有效引用(该 GUI 持有该字段) 可以调用此方法并更新 JTextArea 的文本。请注意,一个常见的错误是为希望添加文本的类提供对保存 JTextArea 的类的新且完全唯一的引用,但如果这样做,您将设置不显示的 GUI 的文本。因此,请确保在正确的可视化实例上调用此方法。

<小时/>

如果此答案不能帮助您解决问题,请考虑发布有关所涉及的类的更多信息,包括相关代码和背景信息。您向我们提供的信息越具体、越有用,通常我们就能为您提供越具体、越有帮助的答案。

<小时/>

编辑
关于此错误:

"textArea can not be resolved"

这段代码:

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变量,使其成为类的字段。例如:

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);
}

关于java - 从另一个 java 文件追加 java 中的文本区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22423981/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com