2017-12-23 2 views
1

Ich habe ein Objekt ReminderGUI, das ein Feld JTextArea hat. ReminderGUI stellt eine App dar, mit der Erinnerungen gespeichert und angezeigt werden können. Wenn auf getReminderButton geklickt wird, möchte ich, dass die App die Erinnerung findet, die zuvor für dieses Datum gespeichert wurde, und sie in der anzeigen (diese Funktion wird im Code-Snippet nicht angezeigt).Wie ändert man `JTextArea` Inhalte mit` JTextArea` Instanzfeld?

Ich habe Probleme mit der Änderung JTextArea Text und der Code unten demonstriert es. Sobald getReminderButton angeklickt wird, dann soll getReminderButtonHandler() einen neuen leeren initialisieren und dann an some new text here anhängen. Warum funktioniert das nicht?

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

public class ReminderGUI extends JFrame implements ActionListener{ 

    private JButton getReminderButton; 
    private JTextArea reminderTextArea; 

    public ReminderGUI() { 
     super(); 
     super.setLayout(new BorderLayout()); 
     this.reminderTextArea = new JTextArea("Enter text"); 
     this.getReminderButton = new JButton("Get reminder"); 

     JPanel southPanel = new JPanel(); 

     southPanel.add(getReminderButton, BorderLayout.SOUTH); 

     super.add(southPanel, BorderLayout.SOUTH); 
     super.add(reminderTextArea, BorderLayout.CENTER); 

     this.getReminderButton.addActionListener(this); 
    } 

    public void actionPerformed(ActionEvent e) { 
     if(e.getSource() == this.getReminderButton) { 
      this.getReminderButtonHandler(); 
     } 
    } 

    private void getReminderButtonHandler() { 
     this.reminderTextArea = new JTextArea(""); 
     this.reminderTextArea.append("some new text here"); 
    } 

    public static void main(String[] args) { 
     ReminderGUI rmg = new ReminderGUI(); 
     rmg.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     rmg.setSize(500, 300); 
     rmg.setVisible(true); 
    } 
} 
+0

@Nehorai das Problem dadurch gelöst, aber warum war meine Methode falsch? – Yos

+0

Sie erstellen eine *** neue *** JTextArea in der Methode, warum sollte es funktionieren? Wenn Sie den Text dieser neuen JTextArea festlegen, warum glauben Sie, dass es den Text in der angezeigten JTextArea magisch verändern würde? Dies deutet auf ein grundlegendes Missverständnis darüber hin, wie Java-Objekte funktionieren. –

+0

@HovercraftFullOfEels, aber ich setze es auf das vorhandene Feld. Muss ich eine Art Repaint() Methode verwenden? – Yos

Antwort

2

Das Problem ist in dieser Zeile: this.reminderTextArea = new JTextArea("Enter text"); Sie eine neue TextArea- Schaffung

Sie können diese Funktion die set Methode, wie folgt aus: reminderTextArea.setText(text);