JTextArea entfernen und durch neuen Text ersetzen

AloeBoy

Neues Mitglied
Hallo, ich habe würde gerne eine grafische Oberfläche erstellen, in der ein Text erscheint (JTextArea). Wenn ich auf den Button (JButton) klicke, soll das erstellte Textfeld durch ein neues Textfeld ersetzt werden. Leider klappt es nicht, des alten Text zu entfernen und den neuen darauf zu setzen. Es handelt sich dabei um etwas, was ich grade für die Uni mache.

Ich wäre für Hilfe sehr dankbar, hier mein Code:

Java:
import java.awt.Container;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;


public class Beispiel {

    // Fenster 

    JTextArea text;

    private JFrame frame;

    private Container contentPane;

    // Konstruktor

    public Beispiel() {

    generateUI(); // Fenster wird erstellt

    generateText();

    generateButton();

    }

    // Fenster erstellen: 

    private void generateUI() {

    frame = new JFrame("Texte");

    frame.setSize(400, 480);

    frame.setLocationRelativeTo(null);

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    contentPane = frame.getContentPane();

    contentPane.setLayout(null);

    frame.setVisible(true);

    }

    // Text erstellen: 

    public JTextArea generateText() {

    text = new JTextArea("Text AAAA");

    text.setBounds(165, 100, 100, 20); 

    contentPane.add(text);

    return text;

    }

    private void generateButton() {

    JButton weiterButton = new JButton("Weiter");

    weiterButton.setBounds(165, 300, 70, 35);

    weiterButton.addActionListener(new ActionListener() { 

    @Override

    public void actionPerformed(ActionEvent e) {    

    JTextArea nächsterText = new JTextArea("Text BBBB");

    nächsterText.setBounds(150, 200, 100, 40);

    contentPane.remove(text);

    contentPane.add(nächsterText);

           }

    });

    contentPane.add(weiterButton);

    }    

    public static void main(String[] args) {

    EventQueue.invokeLater(new Runnable() {

    public void run() {

    new Beispiel();

               }

         });

    }


}
 
Zuletzt bearbeitet von einem Moderator:
Du führst da zwar diese Aktionen aus, aber du sagst dem Fenster nicht, dass es neu gemalt werden soll. Du musst also noch ein repaint() Aufruf einfügen:
Java:
            @Override
            public void actionPerformed(ActionEvent e) {
                JTextArea nächsterText = new JTextArea("Text BBBB");
                nächsterText.setBounds(150, 200, 100, 40);
                contentPane.remove(text);
                contentPane.add(nächsterText);
                contentPane.repaint();
            }
 
Du führst da zwar diese Aktionen aus, aber du sagst dem Fenster nicht, dass es neu gemalt werden soll. Du musst also noch ein repaint() Aufruf einfügen:
Java:
            @Override
            public void actionPerformed(ActionEvent e) {
                JTextArea nächsterText = new JTextArea("Text BBBB");
                nächsterText.setBounds(150, 200, 100, 40);
                contentPane.remove(text);
                contentPane.add(nächsterText);
                contentPane.repaint();
            }
Es klappt, und hab auch verstanden woran es lag, vielen Dank für die Erklärung zu der Codeergänzung
 
is dennoch die falsche Herangeheinsweise.
Nur wenn es wirklich darum geht, den Text austauschen zu wollen.

Wenn es um eine dynamische Anpassung eines Fensters geht, dann kann das durchaus korrekt sein. Uns fehlen da einfach die genauen Anforderungen. Das Codebeispiel kann ein einfaches, minimales Beispiel sein.
 
Nur wenn es wirklich darum geht, den Text austauschen zu wollen.

Wenn es um eine dynamische Anpassung eines Fensters geht, dann kann das durchaus korrekt sein. Uns fehlen da einfach die genauen Anforderungen. Das Codebeispiel kann ein einfaches, minimales Beispiel sein.
Nein, wenn man keine weiteren Infromationen hat, wählt man die einfachstmögliche Lösung. Und das hast du nicht getan. Hunde verhalten sich auch manchmal so 🙂
 
Nein, wenn man keine weiteren Infromationen hat, wählt man die einfachstmögliche Lösung. Und das hast du nicht getan. Hunde verhalten sich auch manchmal so 🙂
Ach, neues Account von Tobias?

Und nein, deine Sichtweise Teile ich nicht.
a) Wenn man keine Informationen hat, dann beantwortet man die Frage / löst das Problem!
b) Wenn man meint, dass ein "xy-Problem" vorliegt, dann fragt man freundlich nach und gibt entsprechend Anregungen / Hinweise
c) Man vergleicht hier im Forum keine User mit Tieren - zumindest nicht, wenn man nicht sofort wieder gebannt werden will.
 

Neue Themen


Zurück
Oben