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
}
}