JLabel ändern während Programm ausgeführt wird

Nik243

Mitglied
Hallo, ich möchte einen sich im Frame verändernden Wert haben. Also der wir als als Text von
einem Label angezeigt. Falls ich komplett falsch angefangen hab, ändert es einfach.
Danke im voraus 🙂


Java:
package Pack1;

import java.util.Timer;
import java.util.TimerTask;

import javax.swing.JFrame;
import javax.swing.JLabel;

public class MainClass extends JFrame {
public static int zahl = 5;
    public static void main(String[] args) {
        Timer t = new Timer();
        t.schedule(new TimerTask(){
                public void run(){
            System.out.println(zahl); // <--- Damit teste ich ob der Timer geht. Jo alle2Sekundenwird der wert erhöht. 
            zahl = zahl + 1;
                }
        },2000,2000);
    new MainClass();
    }

    public MainClass(){
        super("Zahlen = cool");
        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(300, 150);
        JLabel lbl = new JLabel(String.valueOf(zahl)); // <--- Der bleibt aber immmer auf 5.
        add(lbl);
       
    }
}
 
So erstmal, wieso erbst du von JFrame 🙂 man erbt nur wenn man wirklich das Verhalten erweitern will. Du brauchst jedoch nur ein Frame. Dein Label muss auch jeden Zeitschritt verändert werden, dass erreichst du wenn du eine Referenz darauf hast. Im folgenden Code habe ich es soweit abgeändert, dass deine Anforderung erfüllt ist.
Java:
public class MainClass extends JFrame {
    private static int zahl = 5;
    private static JLabel label;

    public static void main(String[] args) {
        Timer t = new Timer();
        t.schedule(new TimerTask() {
            @Override
            public void run() {
                System.out.println(zahl); // <--- Damit teste ich ob der Timer
                                            // geht. Jo alle2Sekundenwird der
                                            // wert erhöht.
                zahl = zahl + 1;
                label.setText(String.valueOf(zahl));
            }
        }, 2000, 2000);
        new MainClass();
    }

    public MainClass() {
        super("Zahlen = cool");
        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setSize(300, 150);
        label = new JLabel(String.valueOf(zahl));
        add(label);
    }
}

Hier der Code nochmal besser strukturiert:
Java:
public class MainClass {
    private static final int WIDTH = 300;
    private static final int HEIGHT = 150;

    private int zahl = 5;
    private JLabel zaehlerLabel;
    private JFrame frame;

    public static void main(String[] args) {
        new MainClass();
    }

    public MainClass() {
        this.createFrame();
        this.createTimer();
  
        zaehlerLabel = new JLabel(String.valueOf(zahl));
        frame.add(zaehlerLabel);
    }

    public void createFrame() {
        frame = new JFrame("Zahlen = cool");
        frame.setVisible(true);
        frame.setSize(WIDTH, HEIGHT);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    public void createTimer() {
        Timer timer = new Timer();
        timer.schedule(new TimerTask() {
            @Override
            public void run() {
                zahl++;
                zaehlerLabel.setText(String.valueOf(zahl));
            }
        }, 2000, 2000);
    }
}

Variablen am besten auch immer gut benennen.... nicht "lbl" für Label... wozu soll das gut sein, wer sagt das kurze Namen gut sind. Wenn du deinen Code in ein paar Tagen nochmal lesen musst und irgendwo steht lbl1 lbl2 lbl3 dann bringt das einfach nix.
 
Das ergibt sinn. Danke euch und das mit den Label namen ist eh egal ich lösch das eh. Das ist nur so eine Art test für ein anderes Projekt. Wenn mal so darüber nachdenket hätte ich da selber drauf kommen können. 😀
 

Neue Themen


Zurück
Oben