【发布时间】:2015-09-04 02:53:02
【问题描述】:
我正在尝试将文本附加到 JTextArea。我了解如何通过事件侦听器添加文本,但如果从主方法调用方法,我似乎无法理解如何添加文本。文本被附加到 JTextArea 就好了,但是 JTextArea 组件没有更新/重新绘制/重新验证/验证(或者你应该说的任何内容:-))。
GUI测试
public class GUITest {
private GUI gui = null;
public GUITest() {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
gui = GUI.getInstance();
gui.createAndShowGUI();
gui.addTxt("Test1");
gui.addTxt("Test2");
gui.addTxt("Test3");
gui.addTxt("Test4");
}
});
}
public static void main(String[] args) {
new GUITest();
}
}
图形界面
public class GUI extends JPanel {
private static final long serialVersionUID = 1L;
private ConsolePanel console;
private static GUI instance;
private GUI() {
console = new ConsolePanel();
add(console);
}
public static GUI getInstance() {
if(instance == null) instance = new GUI();
return instance;
}
public void createAndShowGUI() {
// Create window
JFrame f = new JFrame("GUI");
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.setBackground(Color.decode("#333333"));
f.setResizable(false);
// Create the content pane
JComponent c = new GUI();
c.setOpaque(false);
f.setContentPane(c);
// Draw the window
f.pack();
f.setVisible(true);
}
public void addTxt(String txt) {
console.addTxt(txt);
}
}
控制台
public class ConsolePanel extends JPanel {
private static final long serialVersionUID = 1L;
private JTextArea console;
public ConsolePanel() {
console = new JTextArea("Init...", 10, 10);
add(console);
}
public void addTxt(String txt) {
console.append(txt);
}
}
如何正确实现addTxt-method,让“Test1”、“Test2”...也被添加并显示在文本组件上?
固定:
将JComponent c = new GUI() 改为JComponent c = instance。
【问题讨论】:
-
有些地方可能没有正确连接,但根据上面的代码我看不到。您应该考虑创建和发布sscce 或minimal example program/mcve,在其中将代码压缩为仍可编译和运行的最小位,没有外部依赖项(例如需要链接到数据库或图像),没有额外的与您的问题不相关但仍演示您的问题的代码。请注意,您的 sscce 不应使用 MigLayout 或任何其他外部依赖项。保持简单。
-
我的猜测:您可能在未显示的代码中隐藏了一个变量。
-
@AbishekManoharan:请删除您的误导性评论。在 JTextArea 上调用
append(...)之后,再也不需要调用revalidate()。 -
@HovercraftFullOfEels 我现在尝试删除所有不必要的代码。它编译并运行得很好。但是没有添加行。
-
在我看来,他正在重新创建新实例,而不是调用实例方法来附加文本。因此没有看到任何更新。
标签: java swing jpanel append jtextarea