在Graphics2D上调用drawRect方法是否触发paintComponent方法?
问题描述:
我想弄清楚我的程序的行为,这是我最好的理论,为什么它做它的事情。我希望这将使用rand
变量来决定绘制哪种形状,但相反,似乎paintComponent
方法在定时器点火之间被多次调用,导致许多形状被绘制,我试图理解为什么。在Graphics2D上调用drawRect方法是否触发paintComponent方法?
这是代码:
public class TestPane extends JPanel {
private int yPos0;
private int yPos1;
private int boundary0=750;
private ActionEvent ae = null;
private Graphics g0 = null;
private int count=1;
public TestPane(Color foreground){
setForeground(foreground);
this.setBackground(Color.BLUE);
Timer timer = new Timer(3000,new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
ae = e;
yPos0 =yPos0+50;
repaint();
}
});
timer.start();
}
@Override
public void paintComponent(Graphics g){
g0 = g;
super.paintComponent(g);
createShape(yPos0);
repaint();
}
public void createShape(int ypos0){
//generate random number between 1 and 3 and assign to rand
int rand = (int)((Math.random()*3)+1);
System.out.println(rand);
if(rand==1){
Graphics2D g2d = (Graphics2D) g0.create();
g2d.setColor(Color.RED);
g2d.drawRect(0, ypos0, 200, 50);
}
if(rand==2){
Graphics2D g2d = (Graphics2D) g0.create();
g2d.setColor(Color.GREEN);
g2d.drawRect(0, ypos0, 150, 50);
g2d.drawRect(50, ypos0+50,50,50);
}
}
}
答
之所以paintComponent
被称为这么多次的是,你在呼唤导致本身方法中repaint
被称为循环往复。这不是必需的,因为您已从Timer
呼叫repaint
。
哇,这是我的头颅。谢谢陌生人 – 2013-03-06 20:35:35