Ich habe eine Haupt-GUI-Klasse, die in der NetBeans Gui-Builder gemacht wurde. Ich erstelle ein Minispiel, in dem der Timer von JLabel ausfällt. Das JLabel befindet sich in der Haupt-GUI, und der Zeitgeber befindet sich beispielsweise in separaten Klassen mit der Bezeichnung timer
. Wenn die Schleife für den Timer eine Schleife bildet, möchte ich, dass sich das JLabel, das sich in der Hauptgui befindet, ändert (Timer = 10, Timer = 9, ... usw.).Ändern Sie Label-Text aus verschiedenen Klassen in Java
Überprüfen Sie den folgenden Beispielcode zum besseren Verständnis.
Dies ist die Klasse, wo der Timer befindet:
public class ShapeGame {
Timer timer;
int counter = 10;
ShapeGame() {
ActionListener a = new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("Counter = " + counter);
labTimer.setText("Timer: " + counter);
if (--counter < 0) {
timer.stop();
System.exit(0);
}
}
};
timer = new Timer(1000, a);
timer.start();
}
}
Diese geänderte Code für wo die JLabel befindet:
(Anmerkung: nicht alle Code für die JLabel und JFrame wurden hinzugefügt nur für Zwecke)
public class mainGui extends JFrame {
labTimer = new javax.swing.JLabel();
private void gameStartStopActionPerformed(java.awt.event.ActionEvent evt) {
ShapeGame sg = new ShapeGame();
}
}
Lesen verstehe ich dies nicht der richtige Weg ist, labTimer.setText("Timer: " + counter);
das Label aus einer anderen Klasse zu nennen. Ich hoffe, ich habe genug Informationen zur Verfügung gestellt, um dieses Problem zu lösen.
Übergeben Sie entweder eine Referenz des Labels an den ActionListner (nicht die beste Lösung) oder richten Sie ein Observer-Muster mit dem ActionLisyener ein, so dass es interessierte Parteien benachrichtigen kann, wenn es sich ändert – MadProgrammer