这是我目前在游戏中遇到的问题。这是一种用户和 friend 可以一起玩的井字游戏。我还没有完成,但这就是我所得到的。每当窗口最小化或被另一个窗口覆盖时,绘制的图形部分(X 和 O)都会被删除。我真的不知道该怎么办,如果有一种方法可以让绘图不会被删除,那就太好了。我的主类的 paintComponent()
方法只是设置了板的设计。
感谢任何帮助,谢谢!
private class DrawXO implements MouseListener {
public void mousePressed(MouseEvent evt) {
int x = evt.getX();
int y = evt.getY();
Graphics gContext = getGraphics();
Graphics2D graphics = (Graphics2D) gContext;
graphics.setStroke(new BasicStroke(8));
if (playerOneTurn) {
Player1.drawCircle(gContext, x, y );
checkForWinner();
if(playerOneWins) {
System.out.println("Player one wins");
}
playerTwoTurn = false;
} else {
// Still need to implement drawing for this ~
checkForWinner();
}
}
public void mouseExited(MouseEvent evt) {}
public void mouseEntered(MouseEvent evt) {}
public void mouseClicked(MouseEvent evt) {}
public void mouseReleased(MouseEvent evt) {}
}
最佳答案
不要使用
getGraphics();
您需要了解如何在 Swing 中完成自定义绘制。跑通Performing Custom Painting 。您会注意到,绘制需要使用
paintComponent
方法(在您的JPanel
或JComponent
类中),该方法接受用于执行自定义绘制的Graphics
(为您创建的)上下文。所有的绘画都应该在这个背景下完成。protected void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2 = (Graphics2D)g; // do painting here }
注意:永远不要显式调用此方法,它会自动调用
要更新图形,您将对一些绘制变量进行一些更新,然后调用
repaint()
。也许是这样的:@Override public void mousePressed(MouseEvent e) { x = e.getX(); y = e.getY(); repaint(); } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2 = (Graphics2D)g; g2.fillRect(x, y, width, height); }
如果您想添加/绘制多个对象(例如单击鼠标),则保留对象的
List
并在paintComponent
方法中迭代该列表。单击鼠标时,将另一个对象添加到列表中并重新绘制。类似的东西List<Rectangle2D> rectangles; ... @Override public void mousePressed(MouseEvent e) { x = e.getX(); y = e.getY(); rectangles.add(new Rectangle2d.Double(x, y, width, height); repaint(); } ... @Override protected void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2 = (Graphics2D)g; for (Rectangle2D rect: rectangles) { g2.fill(rect); } }
关于java - 如果屏幕最小化,如何防止Java删除内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23419889/