@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();
}
}
}
我在写一个蛇游戏程序。虽然没有调用那个paint方法。 解释代码: 我添加一个菜单栏到我的框架 在菜单栏开始是一个菜单,其中有3个子菜单,即慢,中,快。 每当我说慢的蛇的运动被决定,现在我应该能够在框架中看到一个矩形框(至少)。 这就是为什么我在那里调用重绘方法。
除了this.repaint()之外,我还使用了frame.repaint()/ just repaint()。 但是方法没有被调用。
感谢您提前帮助。
答案 0 :(得分:1)
我正在使用流布局管理器frame.setLayout(new FlowLayout());
FlowLayout尊重添加到面板的所有组件的大小。您正在创建自定义组件,默认情况下,组件的大小为(0,0),因此无需绘制任何内容。
覆盖自定义组件的getPreferredSize()
以返回组件的正确尺寸。
此外,自定义绘制是通过覆盖paintComponent(...)
方法而不是paint()方法完成的。
阅读Custom Painting上Swing教程中的部分,了解有关如何执行此操作的更多信息和工作示例。