Java: My image flickers when i redraw it. How can i draw the image without flickering?

Viewed 32

I want to program my first chess game and I encountered a problem with images. If I want to redraw in my paint method my image of the black pawn is flickering but not the board itself. Does anyone know a trick or the proper programming for this problem? Maybe I did it wrong and other methods can solve my problem better. Please let me know. Sorry for this newbie question.

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.HeadlessException;
import java.awt.Point;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.image.BufferedImage;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.*;

public class Schachbrett extends JFrame implements Runnable, KeyListener, MouseListener, MouseMotionListener {

    private static final int WINDOWWIDTH = 900;
    private static final int WINDOWHEIGHT = 900;
    double mouseX;
    double mouseY;
    Point p1;
    BufferedImage blackPawn;

    public Schachbrett() {

        this.setBounds(300, 100, WINDOWWIDTH, WINDOWHEIGHT);

        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        this.setResizable(false);
        this.setTitle("Schach");
        this.setVisible(true);
        Thread t1 = new Thread(this);
        t1.start();

        loadThePictures();
        addMyListener();

        p1 = new Point();
    }

    private void loadThePictures() {
        try {
            blackPawn = ImageIO.read(getClass().getResourceAsStream("/resources/black_pawn.png"));
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    private void addMyListener() {
        this.addKeyListener(this);
        this.addMouseListener(this);
        this.addMouseMotionListener(this);

    }

    @Override
    public void keyPressed(KeyEvent arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public void mouseMoved(MouseEvent arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public Point getMousePosition(boolean arg0) throws HeadlessException {

        return super.getMousePosition(arg0);
    }

    public void run() {

        while (true) {
            update();
            repaint();
        }

    }

    private void update() {

    }

    @Override
    public void paint(Graphics g) {
        Graphics2D g2d = (Graphics2D) g;
        
        drawBoard(g2d);
        g2d.drawImage(blackPawn, 50, 150, null);
    }

    private void drawBoard(Graphics2D g2d) {
        g2d.setFont(new Font("SansSerif", Font.BOLD, 32));
        char[] arr = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H' };
        for (int i = 0; i < 8; i++) {
            g2d.drawString(Character.toString(arr[i]), 17, 815 - (i * 100));
        }
        for (int i = 0; i < arr.length; i++) {
            g2d.drawString(Integer.toString(i + 1), 95 + (i * 100), 885);
        }

        for (int i = 0; i < 8; i++) {
            for (int j = 0; j < 8; j++) {
                if (j % 2 == 1) {
                    if (i % 2 == 1) {
                        g2d.setColor(Color.white);
                    } else {
                        g2d.setColor(Color.DARK_GRAY);
                    }
                    g2d.fillRect((j * 100) + 50, (i * 100) + 50, 100, 100);
                } else {
                    if (i % 2 == 0) {
                        g2d.setColor(Color.white);
                    } else {
                        g2d.setColor(Color.DARK_GRAY);
                    }
                    g2d.fillRect((j * 100) + 50, (i * 100) + 50, 100, 100);
                }
            }
        }
    }

    private void drawBoard() {
        // TODO Auto-generated method stub

    }

    @Override
    public void mouseDragged(MouseEvent arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public void mouseClicked(MouseEvent arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public void mouseEntered(MouseEvent arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public void mouseExited(MouseEvent arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public void mousePressed(MouseEvent arg0) {
        p1 = getMousePosition();
        System.out.println("Das ist die X Koordinate: " + p1.getX() + "\n" + "Das ist die Y Koordinate: " + p1.getY());

    }

    @Override
    public void mouseReleased(MouseEvent arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public void keyReleased(KeyEvent arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public void keyTyped(KeyEvent arg0) {
        // TODO Auto-generated method stub

    }
}

0 Answers
Related