gpt4 book ai didi

java - 如果屏幕最小化,如何防止Java删除内容?

转载 作者:太空宇宙 更新时间:2023-11-04 06:50:05 25 4
gpt4 key购买 nike

这是我目前在游戏中遇到的问题。这是一种用户和 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) {}
}

最佳答案

  1. 不要使用getGraphics();

  2. 您需要了解如何在 Swing 中完成自定义绘制。跑通Performing Custom Painting 。您会注意到,绘制需要使用 paintComponent 方法(在您的 JPanelJComponent 类中),该方法接受用于执行自定义绘制的 Graphics(为您创建的)上下文。所有的绘画都应该在这个背景下完成。

    protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    Graphics2D g2 = (Graphics2D)g;
    // do painting here
    }

    注意:永远不要显式调用此方法,它会自动调用

  3. 要更新图形,您将对一些绘制变量进行一些更新,然后调用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);
    }
  4. 如果您想添加/绘制多个对象(例如单击鼠标),则保留对象的 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com