摆动时自定义组件出现问题

时间:2010-03-10 16:55:54

标签: java swing

我不习惯GUI开发,但现在我需要它一点点,我想避免因为这个问题而阅读所有文档。

我在显示自定义组件时遇到问题,例如我在下面发布的组件。如果我将它添加到JFrame它工作正常,但我不能添加更多,如果我将它添加到JPanel它根本不会显示。

import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JComponent;

public class Test extends JComponent implements Runnable {

    private int c,x,y;

    public Test(int x,int y){
        c = 0;
        this.x = x;
        this.y = y;
    }

    private void inc(){
        c++;
        if(c>255){
            c = 0;
        }
    }

    public void paint(Graphics g) {
        g.setColor(new Color(c,c,c));
        g.fillRect(x, y, 50, 50);
    }

    public void run() {
        while(true){
            inc();
            try{
                Thread.currentThread().sleep(20);
            } catch (Exception e){
            }
            repaint();
        }
    }
}

2 个答案:

答案 0 :(得分:2)

  

我想避免全部阅读   文档只是因为这个   问题

是的,好的阅读实际上节省了时间,因为你第一次做的事情是正确的,而你不必坐在那里等待/希望有人回答你的问题。

首先从Swing tutorial

开始

1)通过覆盖paintComponent()方法完成自定义绘制。阅读关于“自定义绘画”的Swing教程中的部分。

2)动画应该使用Swing Timer完成,请参阅“如何使用计时器”教程中的部分。

3)实际上,您不需要创建自定义组件。您需要做的就是创建一个JPanel,设置其首选大小,然后使用Timer更改其背景。

答案 1 :(得分:1)

作为最低要求,你还应该在构造函数中设置setPreferredSize(x + 50,y + 50)和setMininumSize(x + 50,y + 50),让布局管理器知道你的组件的大小,以便将它放在容器中小部件正确。

另外,不是从AWTEventThread调用repaint()是非常糟糕的。使用SwingUtilities.invokeLater()。