好的,我目前正在为一个项目制作一个蛇和梯子游戏,我遇到了一个以前从未遇到过的问题。我有一个名为Player的类,它是游戏板上的一个圆圈。
paintComponent方法应该经常打印true,但它没有
public class Player extends JComponent {
private double playerX;
private double playerY;
private double diameter;
private String playerColor;
HashMap<String, Color> colorMap = new HashMap();
public Player(String playerColor, double playerX, double playerY, double diameter) {
this.playerColor = playerColor;
this.playerX = playerY;
this.playerY = playerY;
this.diameter = diameter;
setSize(getPreferredSize());
setLocation((int) diameter, (int) diameter);
}
@Override
public Dimension getPreferredSize() {
return new Dimension((int) diameter * 2, (int) diameter * 2);
}
@Override
public void paintComponent(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
super.paintComponent(g2d);
setDoubleBuffered(true);
g2d.drawOval((int) playerX, (int) playerY, (int) diameter * 2, (int) diameter * 2);
System.out.println(true);
}
}发布于 2017-05-06 17:04:24
您不应该扩展JComponent来创建新组件,而应该通过覆盖paintComponent(..)来自定义绘制过程。
如果要创建具有自定义绘画方案的新组件,请使用JPanel并重写paint(..)方法。
public class Player extends JPanel {
private static final long serialVersionUID = 1L;
private double playerX;
private double playerY;
private double diameter;
private String playerColor;
HashMap<String, Color> colorMap = new HashMap<>();
public Player(String playerColor, double playerX, double playerY, double diameter) {
this.playerColor = playerColor;
this.playerX = playerY;
this.playerY = playerY;
this.diameter = diameter;
setSize(getPreferredSize());
setLocation((int) diameter, (int) diameter);
}
@Override
public Dimension getPreferredSize() {
return new Dimension((int) diameter * 2, (int) diameter * 2);
}
@Override
public void paint(Graphics g) {
super.paint(g);
Graphics2D g2d = (Graphics2D) g;
setDoubleBuffered(true);
g2d.drawOval((int) playerX, (int) playerY, (int) diameter * 2, (int) diameter * 2);
System.out.println(true);
}
}更多信息here。
https://stackoverflow.com/questions/43814940
复制相似问题