Java 为什么在蛇游戏中不调用画法

Java 为什么在蛇游戏中不调用画法,java,swing,actionlistener,paintcomponent,repaint,Java,Swing,Actionlistener,Paintcomponent,Repaint,我正在写一个蛇游戏程序。执行此操作时,未调用绘制方法。 解释代码: 我正在为我的框架添加一个菜单栏 在该菜单栏中,“开始”是一个菜单,其中包含3个子菜单,即慢、中、快。 每当我说慢的时候,蛇移动的动作就已经决定了,现在我应该能够在画面中看到一个矩形框(至少)。 这就是我在那里调用重新绘制方法的原因 除此之外,我还使用了frame.repaint()/just repaint()。 但方法未被调用 谢谢你在高级阶段的帮助 im使用flow layout manager frame.setLayou

我正在写一个蛇游戏程序。执行此操作时,未调用绘制方法。 解释代码: 我正在为我的框架添加一个菜单栏 在该菜单栏中,“开始”是一个菜单,其中包含3个子菜单,即慢、中、快。 每当我说慢的时候,蛇移动的动作就已经决定了,现在我应该能够在画面中看到一个矩形框(至少)。 这就是我在那里调用重新绘制方法的原因

除此之外,我还使用了frame.repaint()/just repaint()。 但方法未被调用

谢谢你在高级阶段的帮助

im使用flow layout manager frame.setLayout(新建FlowLayout())

FlowLayout考虑添加到面板的所有组件的大小。您正在创建自定义组件,默认情况下,组件的大小为(0,0),因此无需绘制任何内容

覆盖自定义组件的
getPreferredSize()
,以返回组件的正确尺寸

此外,自定义绘制是通过覆盖
paintComponent(…)
方法而不是paint()方法来完成的

阅读上Swing教程中的部分,了解更多信息和演示如何执行此操作的工作示例。

也可参考--->im使用flow layout manager frame.setLayout(new flow layout());例如,在发布可能有帮助的内容之前。1)为了更快地获得更好的帮助,请发布一个(最小完整且可验证的示例)。2)
public void paint(Graphics g){super.paint(g);
应该是
public void paintComponent(Graphics g){super.paintComponent(g);
@SuppressWarnings("serial")
class GUI extends JPanel implements ActionListener
{

    public void paint(Graphics g)
    {
        super.paint(g);
        System.out.println("In here...");
        g.drawRect(frame.getWidth()/2,frame.getHeight()/2,(frame.getWidth()/2)+5,(frame.getHeight()/2+5));
        g.setColor(Color.BLACK);
        g.fillRect(frame.getWidth()/2,frame.getHeight()/2,(frame.getWidth()/2)+5,(frame.getHeight()/2+5));
    }

    @Override
    public void actionPerformed(ActionEvent ae) 
    {
        if(ae.getSource() == slow)
        {
            this.setMotionToSnake(slowMotion);  
            this.repaint();
        }

}
}