Wątek przeniesiony 2015-10-25 07:34 z Java przez bogdans.

JFrame - zmiana tekstu po określonym czasie

0

Witam !
Jestem niestety prawie zielony w javie, dlatego moje pytania będą pewnie banalne, mianowicie: stworzyłem JFrame i chciałbym, aby tam przez 10 sekund zmieniał się napis. Metoda działa na konsoli a w oknie nie :-(. Może ktoś by mi podpowiedział jak to zrobić poprawnie?
A tak wygląda kod:

JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(600,300);
frame.setVisible(true);
		    
for (int i = 0; i <= 5; i++)
        {
        	label = new JLabel("tekst a");
		frame.add(label);
				
		try {Thread.sleep(1000);} 
                catch(InterruptedException ex) {Thread.currentThread().interrupt();};
	        	
	        label = new JLabel("tekst b");
	        frame.add(label);	
	        	
	        try {Thread.sleep(1000);} 
                catch(InterruptedException ex) {Thread.currentThread().interrupt();};
	  }
1

Po pierwsze, zmiany muszą być w osobnym wątku. Najprościej pewnie, to wykorzystać Timer.
Po drugie, zmieniaj tekst przez

label.setText(...);

a nie przez tworzenie nowych obiektów.

1

Przykładowy kod:

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

public class Teksty extends JFrame 
{
    private JLabel label = new JLabel("Tekst początkowy");
    private int counter = 0;
    private Timer timer = null;
    public static void main(String[] args)
    {
        new Teksty();
    }
    public Teksty() 
    {
        add(label);
        pack();
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        timer = new Timer(1000,new ActionListener()
        {
            public void actionPerformed(ActionEvent evt)
            {
                counter++;
                label.setText("Ilość sekund: "+counter);
                if(counter == 9)
                {
                    timer.stop();
                }
            }
        });
        timer.start();        
        setVisible(true);
    }
}
0

działa !!!! :-), dzięki, ale jeszcze zadam jedno pytanie (jeżeli oczywiście masz ochotę jeszcze odpowiadać. Chciałbym, aby ta klasa Teksty byłą wykonywana z innej klasy (tam gdzie jest main) i naprawdę nie wiem jak ją pozmieniać (no i uruchomić z klasy main).

1

Wywołaj konstruktor (new Teksty()) w tamtej metodzie main. W klasie Teksty nie musisz nic zmieniać.

0

jeszcze raz dzięki

0

zrobione, dzięki!

1 użytkowników online, w tym zalogowanych: 0, gości: 1