Może mi ktoś wyjaśnić co tu się tak naprawdę dzieje w tym kodzie?
Po pierwsze zauważyłem że nie wiem czemu obiekt JSpinner nie pojawia się w panelu od razu, tylko dopiero jak zmienię myszką rozmiar okna to się rysuje. Pomyślałem że wykorzystam metodę repaint() ale tu jeszcze bardziej się pomotałem.
Chciałem aby odświeżało ramkę co sekundę dodatkowo w 7 sekundzie narysowało button. Ale tak się nie dzieje. Nie wiem czemu.
Komunikat "wątek" działa co sekundę ale razem z nim powinno sie pojawiać "odrysowano", ale to pojawia się co sekundę dopiero od kiedy pierwszy raz zmienie rozmiar ramki myszką. To samo z buttonem nie pojawia się sam tylko trzeba zmienić rozmiar.
Może ktoś mi to wyjaśnić?
import java.awt.Graphics;
import javax.swing.*;
public class TestRepaint extends JFrame
{
SpinnerNumberModel model1 = new SpinnerNumberModel(0, 0, 60, 1);
JSpinner spinner, spinner2;
MyPanel panel;
int a=0;
TestRepaint()
{
setVisible(true);
setSize(300, 300);
panel = new MyPanel();
panel.add(new JLabel("asd"));
spinner = new JSpinner(model1);
spinner2 = new JSpinner(model1);
panel.add(spinner);
add(panel);
Thread wątek = new Thread(new Runnable()
{
@Override
public void run()
{
// TODO Auto-generated method stub
while (true)
{
a++;
if (a==7)
panel.add(new JButton("asd"));
try
{
Thread.sleep(1000);
} catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("wątek");
panel.repaint();
}
}
});
wątek.start();
}
class MyPanel extends JPanel
{
MyPanel()
{
super();
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
System.out.println("odrysowano");
}
}
public static void main(String[] args)
{
// TODO Auto-generated method stub
TestRepaint app = new TestRepaint();
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
dodanie tagu "java" - fp