java swing podwójne buforowanie

0

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();
            }
        });
    }
}

 
0

Jeśli animacja już nie "mryga" to jest ok. Zresztą nie trzeba się męczyć bo DB jest w Javie już zaimplementowany, wystarczy włączyć.

0

w jaki sposób?? czytałem że domyślnie jest włączone w swingu podwójne buforowanie

0

JComponent#setDoubleBuffered(true) ?? czy jakoś tak

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