Witam.
Mam problem z odświeżaniem przy prostej animacji (rysuję kwadrat w pętli 10 razy zmieniając pozycję by był efekt animacji - poniżej kod) Po wywołaniu metody PanelGlass.powtarzaj(); z głównej klasy (main) wszystko działa - kwadrat porusza się, natomiast gdy wywołuję tą metodę naciskając przycisk "Start" pętla się wykonuje, ale nie widać animacji, rysuje tylko ostatni kwadrat. Dlaczego tak się dzieje i jak to naprawić? (W załączniku spakowana paczka z kodem)
Główna klasa:
package test4;
import javax.swing.*;
public class Test extends JComponent {
public static void main(String[] args) {
JFrame okno = new JFrame("Przezroczystość");
JPanel panel = new PanelNormalny();
okno.getContentPane().add(panel);
PanelGlass panel1 = new PanelGlass();
okno.setGlassPane(panel1);
panel1.setVisible(true);
okno.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
okno.setBounds(300,300,500,500);
okno.setVisible(true);
PanelGlass.setPanel(panel);
PanelGlass.powtarzaj();
}
}
Panel z przyciskiem:
package test4;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class PanelNormalny extends JPanel {
public Graphics2D g2d;
public PanelNormalny() {
JButton b = new JButton("Start");
b.setBounds(100, 10, 100, 50);
add(b);
b.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
PanelGlass.powtarzaj();
System.out.println("Przycisk działa/n");
}
});
}
public void paintComponent(Graphics g) {
g2d = (Graphics2D) g;
g2d.fillRect(10, 10, 150, 150);
}
}
**Panel z animacją: **
package test4;
import javax.swing.*;
import java.awt.*;
public class PanelGlass extends JComponent {
public Graphics2D g2d;
static int x = 10, y = 10;
static JPanel panel;
public static void setPanel(JPanel panel) {
PanelGlass.panel = panel;
}
public static void setXY(int xx, int yy) {
x = xx;
y = yy;
try
{
Thread.sleep(100);
}
catch(InterruptedException ex)
{
Thread.currentThread().interrupt();
}
}
public static void powtarzaj(){
for(int i = 0; i < 10; i++){
setXY(i*10,i*10);
panel.repaint();
}
}
public void paintComponent(Graphics g) {
g2d = (Graphics2D) g;
g.setColor(Color.GRAY);
g2d.fillRect(x, y, 100, 100);
}
}
- test4.zip (1 KB) - ściągnięć: 28