Я пытаюсь добавить текст в JTextArea. Я понимаю, как добавить текст через прослушиватель событий, но я не могу понять, как добавить текст, если, например, вызов метода из основного метода. Текст добавляется к JTextArea просто отлично, но компонент JTextArea не обновляется/не перерисовывается/не проверяется/не проверяется (или что вы должны сказать :-)).Добавить текст в JTextArea
GUITest
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();
}
}
GUI
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);
}
}
ConsolePanel
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-метод правильно, так что "Test1", "test2" .. . также добавляются и отображаются в текстовом компоненте?
Исправлено:
Изменено линию JComponent c = new GUI()
к JComponent c = instance
.
Где-то вещи, скорее всего, не подключены должным образом, но там, где я не могу видеть, основываясь на приведенном выше коде. Вам следует подумать о создании и публикации [sscce] (http://sscce.org) или [минимальной примерной программы/mcve] (http://stackoverflow.com/help/mcve), где вы скомбинируете свой код на самый маленький бит который все еще компилируется и запускается, не имеет внешних зависимостей (например, необходимость привязки к базе данных или изображениям), не имеет дополнительного кода, который не имеет отношения к вашей проблеме, но все же демонстрирует вашу проблему. Обратите внимание, что ваш sscce не должен использовать MigLayout или любые другие внешние зависимости. Будь проще. –
Мое предположение: вы можете затенять переменную в коде, который не показан. –
@AbishekManoharan: пожалуйста, удалите свой вводящий в заблуждение комментарий. Никогда не нужно вызывать 'revalidate()' после вызова 'append (...)' на JTextArea. –