Dzieńdoberek, po dość długim czasie wróciłem do programowania i na rozgrzewkę postanowiłem napisać sobie program, w którym kółko lata od ściany do ściany i się odbija. Wszystko ładnie, pięknie, ale niepłynnie. Bawiłem się delayem i "długością skoku" na jeden raz, ale nie pomogło. Zauważyłem dziwną rzecz - kiedy latam kursorem nad okienkiem, to działa płynnie, a kiedy tylko przestanę albo z niego zjadę, to kółko znowu zaczyna skakać. Pracuję na Ubuntu 12.04 LTS.
Klasa App:
import javax.swing.*;
public class App extends JFrame {
public App() {
setSize(800, 600);
setVisible(true);
setLocationRelativeTo(null);
Anim anim = new Anim();
add(anim);
anim.StartAnim();
}
public static void main(String [] args) {
new App();
}
}
Klasa Anim:
import java.awt.*;
import javax.swing.*;
public class Anim extends JPanel {
int x = 30, y = 30, dx = 1, dy = 3, delay = 10;
public void StartAnim() {
while(true) {
if(x + 30 > getWidth() || x < 0)
dx =- dx;
if(y + 30 > getHeight() || y < 0)
dy =- dy;
x+=dx;
y+=dy;
repaint();
try{
Thread.sleep(delay);
} catch(InterruptedException e) { System.out.println("IE e!"); }
}
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(Color.red);
g2d.fillOval(x, y, 30, 30);
}
}