我不习惯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();
}
}
}
答案 0 :(得分:2)
我想避免全部阅读 文档只是因为这个 问题
是的,好的阅读实际上节省了时间,因为你第一次做的事情是正确的,而你不必坐在那里等待/希望有人回答你的问题。
开始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()。