witam, napisałem program na którym jest rysowany kwadrat i porusza się on. chciałem aby ktoś mi sprawdził czy dobrze zaimplementowałem podwójne buforowanie. oto kod programu
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package javaswingkwadrat;
import java.util.TimerTask;
/**
*
* @author marcin
*/
public class KlasaZadanie extends TimerTask{
int pozX = 50;
int pozY = 50;
int kierunek = 1;
int licznik = 1;
@Override
public void run() {
switch(kierunek){
case 1:
licznik++;
pozX++;
if(licznik == 600){
licznik = 0;
kierunek = 2;
}
break;
case 2:
licznik++;
pozY++;
if(licznik == 400){
licznik = 0;
kierunek = 3;
}
break;
case 3:
licznik++;
pozX--;
if(licznik == 600){
licznik = 0;
kierunek = 4;
}
break;
case 4:
licznik++;
pozY--;
if(licznik == 400){
licznik = 0;
kierunek = 1;
}
break;
}
}
}
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package javaswingkwadrat;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Timer;
import javax.swing.JFrame;
import javax.swing.JPanel;
/**
*
* @author marcin
*/
public class KlasaKwadrat extends JFrame{
private int width = 800;
private int height = 600;
private Dimension dimension = new Dimension(width, height);
JPanel jPanel = new JPanel(true);
KlasaZadanie klasaZadanie = new KlasaZadanie();
Timer timer;
Image bufor;
Graphics bg;
public KlasaKwadrat() {
setTitle("ruchomy kwadrat !!!");
setSize(dimension);
setResizable(false);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
add(jPanel);
bufor = createImage(width, height);
bg = bufor.getGraphics();
timer = new Timer(10, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
klasaZadanie.run();
repaint();
}
});
timer.start();
}
@Override
public void update(Graphics graphics){
bg.clearRect(0, 0, width, height);
paint(bg);
graphics.drawImage(bufor, 0, 0, jPanel);
}
@Override
public void paint(Graphics graphics){
super.paint(graphics);
graphics.setColor(Color.red);
graphics.fillRect(klasaZadanie.pozX, klasaZadanie.pozY, 100, 100);
}
}
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package javaswingkwadrat;
import javax.swing.SwingUtilities;
/**
*
* @author marcin
*/
public class JavaSwingKwadrat {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
KlasaKwadrat klasaKwadrat = new KlasaKwadrat();
}
});
}
}