Swing repaint()不起作用

时间:2014-04-07 00:32:06

标签: swing jframe jpanel paint paintcomponent

 class ballbouncepanel extends JPanel
{
        public void start()
            {

                Timer timer;
                final int FREQ = 45;
                timer = new Timer(FREQ, new ActionListener()
                {
                    public void actionPerformed(ActionEvent evt)
                    {
                        repaint();
                    }
                });
                timer.start();
    }

    Rect rect = new Rect();
        public Dimension getPreferredSize()
        {
            return new Dimension(250,200);
        }
        public void paintComponent(Graphics g)
        {
            super.paintComponent(g);
            rect.draw(g);
            rect.move(g);
            rect.erase(g);
        }
}

class Rect
{
    public int xLocation = 0;
    public int yLocation = 0;
    public int xVelocity = 10;
    public int yVelocity = 10;

    public void draw(Graphics g)
    {
        g.setColor(Color.cyan);
        g.fillRect(xLocation, yLocation, 20, 20);
    }
    public void move(Graphics g)
    {
        xLocation += xVelocity;
        yLocation += yVelocity;
    }
    public void erase(Graphics g)
    {
        g.setColor(Color.white);
        g.fillRect(xLocation, yLocation, 20, 20);
    }
}

新错误是现在我的重绘方法不起作用。

上面是我想要绘制的框架的代码,我理解使用applet或JApplet进行绘制,但我正在尝试做我在Swing上的applet中所做的事情,现在我遇到了问题,我已经查找了许多关于如何实现图形的教程,但是大多数只是运行主图形,我需要我在这个特定的框架(BB)。如果有人可以帮助我理解或指向我的初学者教程,我们将不胜感激。

1 个答案:

答案 0 :(得分:1)

我认为您只是忘记拨打start()的{​​{1}}方法。还要注意:你的ballbouncepanel方法没有绘画,所以取出move()参数并在计时器中调用它

也不确定Graphics方法应该做什么,但我想你想在计时器的每个刻度上改变颜色。在这种情况下,只需保留一个erase变量,然后只需更改该变量即可。你可以看到下面的例子

color