Java 刽子手游戏重绘()不工作

Java hangman game repaint() not working

我一直在制作刽子手游戏来自学Java。我已经进入了框架的主体。

this.add(new PaintSurface(), BorderLayout.CENTER);

我有:

private class PaintSurface extends JComponent {
    Shape found = null;

    public PaintSurface(){
        JOptionPane.showMessageDialog(null, "Repainting");
        Shape s;
        msgbox("LL: " + intLivesLost);
        switch(intLivesLost){
        //draw the Hanged man
        case 10:
            //Face + KILL
        case 9:
            //2nd Arm
        case 8:
            //1st Arm
        case 7:
            //2nd Leg
        case 6:
            //1st Leg
        case 5:
            //Body
        case 4:
            //Head
            shapes.add(s);
        case 3:
            //Horizontal Bar
            s = new Line2D.Float(100, 450, 250, 450);
            shapes.add(s);
            //Rope
            s = new Line2D.Float(250, 450, 250, 500);
            shapes.add(s);
        case 2:
            //Vertical Bar
            s = new Line2D.Float(100, 450, 100, 670);
            shapes.add(s);
        case 1:
            //Stand
            s = new Line2D.Float(40, 670, 460, 670);
            shapes.add(s);
            break;
        default:
            break;          
        }
    }

    public void paint(Graphics g) {
        Graphics2D g2 = (Graphics2D)g;
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                RenderingHints.VALUE_ANTIALIAS_ON);
        g2.setStroke(new BasicStroke(4));
        g2.setColor(Color.BLACK);

        for (Shape count : shapes){
            g2.draw(count);
        }
    }
}

我正在使用:

repaint();

...在整个项目中每次框架更新时,猜出新字母,猜错,新游戏。

应用程序首次运行时JOptionPane.showMessageDialog(null, "Repainting");弹出,所以我知道它被调用了。之后, "Repainting" 弹出窗口不再出现,所以我知道 repaint();电话什么都不做。我知道代码正在进入 repaint();电话,因为我在他们之前和之后放了一个 JOptionPane.showMessageDialog。

我尝试过但没有成功:

removeAll();
revalidate();
getContentPane().repaint();

对此的任何提示和技巧将不胜感激。

编辑:我已经按照你的建议试过了,把代码放在"paint",我想我以前就是这样,但还是不行。不过还是谢谢了。

  1. 不要覆盖 paint,覆盖 paintComponent 或根据您的需要更新。
  2. 您似乎混淆了绘制、重绘和更新方法。阅读此文:https://www.guiguan.net/repaint-paint-and-update/如果你在做游戏,repaint()会导致整个组件重绘,所以你会有一些性能问题。

我已经解决了,将绘图放在一个单独的面板上,一切正常。 感谢您的帮助。