Java: Objekt Attribute als JLabel im Fenster anzeigen?

2 Antworten

kenne mich mit AWT bzw. Swing nur begrenzt au.

Wnen ich mich recht entsinne musst du die Werte in ein JLabel schreiben und dann das fenster neu zeichnen.

Schau dir zuerst das MVC Pattern an. Nach diesem Modell sollte deine Anwendung optimalerweise ebenso aufgebaut sein. Deine Klasse Characters (wieso Plural?) könnte demnach das Model darstellen, GUI die View.

Die View bekommt letzten Endes einfach das Model als Attribut und kann so seine Labels füllen.

class CharactersGui {
  private Characters characters;

  public CharactersGui(Characters characters) {
    this.characters = characters;

    init();
  }

  private void init() {
    // create frame, etc. ...

    JLabel label = new JLabel(characters.getSomeDataToShowInThisLabel());
    frame.add(label);

    frame.setVisible(true);
  }
}

Wenn du nun noch den Observer implementierst (Bestandteil des MVC), kann sich dein Model ändern und die View macht es automatisch ebenso. Wenn die grafische Oberfläche auch auf Events reagieren soll, lies hier mehr zu Event Listenern.

Beachte zudem: Einige Swing Komponenten sind nicht thread-safe, dabei wird das Swing Event Handling auf dem Dispatch Event Thread ausgeführt. Im Klartext bedeutet das für dich, dass du, wenn du im Mainthread Einfluss auf die Swing-Komponenten nehmen möchtest, Inkonsistenzen erzeugen könntest / das Aktualisieren von Komponenten nicht wie gewünscht funktioniert. Nutze daher die SwingUtilities-Klasse:

SwingUtilities.invokeLater(() -> {
  // your application code ...
});

PS.: Die Entscheidung, je Character eine while-Schleife laufen zu lassen, halte ich nicht für elegant. Es muss ja dann für jeden Character ein eigener Thread angelegt werden, damit du den Mainthread nicht blockierst. Löse es doch mit einer einzigen Schleife, die je Spielzug über alle Charaktere läuft und schaut, wer noch lebt.

Wenn du mit Swing ein grafisches Spiel entwickeln möchtest, würde ich dir übrigens davon abraten. Swing wurde nicht für die Spiele-Entwicklung konzipiert.