JAVA - Wie kann ich meinem JTextfield sagen, dass mein ganzes Programm solange warten soll, bis eine Eingabe getätigt wurde??

2 Antworten

Von Experte ohwehohach bestätigt

Nutze das Klickereignis eines Buttons als Indikator, dass der Nutzer eine Eingabe getätigt hat.

Du brauchst also nur einen ActionListener an einen Button hängen. Sobald dieser gedrückt wird, wird von Swing die actionPerformed-Methode (unten umgesetzt durch einen Lambda-Ausdruck) aufgerufen. In der kannst du dir den aktuellen Text aus dem Textfeld holen und beispielsweise seine Länge prüfen oder mit einem anderen String vergleichen.

var textField = new JTextField();
var button = new JButton("Approve");
button.addActionListener(event -> {
  String input = textField.getText();

  if (textField.length() > 0) {
    // do something ...
  }
});

Du musst davon ausgehen, dass UI-Anwendungen eventgesteuert sind. Du musst also irgendeinen Event haben - das kann entweder sein, dass ein Knopf gedrückt wird oder ähnliches, wo dann geprüft wird, ob im Eingabefeld was steht.

Wenn Du einfach eine While-Schleife machst, blockierst Du die Event-Behandlung und bekommst gar keine Eingaben in Dein Textfeld.

Mythxx103 
Fragesteller
 07.12.2021, 18:20

Guck mal :

else if (e.getSource() == com.company.Menubar.item3) {

    SwingUtilities.invokeLater(() -> {
        JFrame frame = new JFrame("Erstellen/Schreiben");
        frame.setSize(500, 300);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new GridLayout(6, 2));

        JTextField schreiben = new JTextField();
        JTextField dateierstellen = new JTextField();
        JLabel output = new JLabel();
        JLabel output2 = new JLabel();
        JButton button = new JButton("Schreiben...");
        JButton erstellen = new JButton("Erstellen...");

        erstellen.addActionListener(event -> output2.setText(dateierstellen.getText()));
        button.addActionListener(event -> output.setText(schreiben.getText()));
        frame.add(dateierstellen);
        frame.add(erstellen);
        frame.add(output2);
        frame.add(schreiben);
        frame.add(button);
        frame.add(output);
        frame.pack();
        frame.setVisible(true);

        while (dateierstellen == dateierstellen)
            try {
                File datei = new File("/home/marc/Notizen/ " + dateierstellen.getText() + ".txt"); // Festgelegte Datei mit Namen schreiben.
                datei.createNewFile();
                JFrame f = new JFrame("Pop-UP");
                JTextField t1;
                t1 = new JTextField("Datei wurde erfolgreich an Stelle : /home/marc/Notizen/" + dateierstellen.getText() + " erstellt.");
                t1.setBounds(50, 100, 200, 30);
                f.add(t1);
                f.setSize(400, 400);
                f.setLayout(null);
                f.setVisible(true);
            } catch (IOException ex) {
                System.out.println("Sorry ! Uns ist wohl ein kleiner Fehler unterlaufen. : ");
                ex.printStackTrace();
            }
    });


Das hier ist einmal ein bisschen was von dem, was ich geschrieben habe. Das mit dem :

 getText();

sagt ihm halt nur, dass der das nehmen soll was dort steht, aber er soll warten.

Wie mache ich das denn jetzt ? Bin so ein Anfänger mit dem Swing, ist also Kack-Code, sieht auch nicht gut aus, soll aber erstmal funktionieren.

0
ohwehohach  07.12.2021, 18:23
@Mythxx103

Naja, der Erstellen-Button hat doch einen Action Listener. Der macht momentan nichts anderes, als den Inhalt des Textfeldes in ein Label zu schreiben. Dort muss Code rein, der a) prüft, ob im Textfeld war drin steht und dann b) eine Methode aufruft, die wirklich die Datei schreibt. Da gehört dann der Code aus dem try/catch rein (ggf. verändert, so dass das funktioniert). Eine Schleife hat da nichts zu suchen.

1
Mythxx103 
Fragesteller
 07.12.2021, 18:44
@ohwehohach

Ich habe halt keine Ahnung, wie ich ausdrücken kann, dass der gucken soll, ob was dort steht. Also steht der Inhalt dann im Label und gar nicht im JTextField? Mir kommen irgendwie nur Abfragen ins Spiel aber wenn das nicht geht, habe ich halt keine Ahnung.

0
ohwehohach  08.12.2021, 09:31
@Mythxx103

Nein. Das JTextField hat Methoden zum Auslesen oder Setzen des Textinhalts. Ohne jetzt gegoogelt zu haben, wie die genau heißen, würde erwarten, so etwas tun zu können:

String inputs = jTextField1.getText();

Dann kannst Du prüfen, ob der Inhalt leer ist mit

if (inputs.length > 0) { ...
1
ohwehohach  09.12.2021, 09:21
@Mythxx103

Alles gut! Regex9 hat doch alles noch einmal schön kurz zusammengefasst.

1