JFrame aktualisieren?

1 Antwort

1) Pack

frame.setVisible(true);

hinter deinen letzten add-Aufruf.

2) Hier:

newActionListener

fehlt ein Leerzeichen hinter new.

3) Du aktualisierst im ActionListener doch eh nichts, was mit der grafischen Oberfläche in Verbindung steht?


Junski1 
Beitragsersteller
 30.01.2022, 18:23

funktioniert leider immer noch nicht. Die Oberfläche wird nicht aktualisiert.

regex9  30.01.2022, 18:28
@Junski1

Du arbeitest offenbar mit zwei verschiedenen Frame-Objekten (frame und PokeballFrame). Du solltest dich wohl für Ersteres entscheiden.

Junski1 
Beitragsersteller
 30.01.2022, 19:39
@regex9

Ich benutze eigentlich nur eins hatte aber einmal die Variablen klassischer dargestellt damit man es besser identifizieren kann.

regex9  30.01.2022, 20:37
@Junski1

Also sind alle Variablen mit dem Präfix Pokeball eigentlich dieselben Variablen, wie die ohne diesen Präfix. Das hättest du früher erwähnen sollen.

Ein komplettes funktionales Beispiel:

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

public class Main {
  private int counter = 1;

  public void showFrame() {
    JFrame frame = new JFrame("Example");
    GridLayout gridLayout = new GridLayout(2, 1);
    frame.setLayout(gridLayout);
    frame.setSize(100, 100);

    JLabel counterDisplay = new JLabel(Integer.toString(counter));
    JButton moreButton = new JButton("<html><h1>^<html>");
    moreButton.addActionListener(event -> {
      ++counter;
      counterDisplay.setText(Integer.toString(counter));
    });
    frame.add(moreButton);
    frame.add(counterDisplay);

    frame.setVisible(true);
  }

  public static void main(String[] args) {
    SwingUtilities.invokeLater(() -> {
      new Main().showFrame();
    });
  }
}
  • Das GridLayout braucht mindestens eine Zeile. Ich habe ihm hier zwei gegeben.
  • Ein repaint-Aufruf ist nicht nötig. Der Frame muss auf dem Event Dispatch Thread erstellt werden (dafür sorgt invokeLater), dann kann der ActionListener den Zustand des Labels auch sicher ändern.
Junski1 
Beitragsersteller
 30.01.2022, 21:18
@regex9

Super hat Funktioniert vielen Dank