如果setBounds方法不在for循环中,那么setBounds方法可以正常工作,但是当我将它放入for lopp时,它会抓住它为什么会这样做?
btnResize.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent arg0) {
//This re sizes the JButton.
btnResize.setBounds(10, 11 ,100, 100);
//This does nothing
for(int i = 0; i < 500; i ++) {
btnResize.setBounds(i, i , i, i);
}
}
});
答案 0 :(得分:3)
你在UI线程中这样做,这意味着在循环结束之前,UI中的任何内容都没有机会对它作出反应...只有最后一次setBounds
调用才真正具有任何可见效果。
如果您正在尝试执行动画,则需要使用某些描述的计时器,以便您可以反复进行小的更改,等待(不阻止UI线程),然后进行其他更改等。(您可能不想使用setBounds
,但这是一个稍微不同的事情。)
请注意,您仍然需要在UI线程上进行更改,因为它们是UI更改 - 您只需要让UI 对更改做出反应,然后再创建下一个。
有关更多信息和示例,请参阅tutorial on Swing timers。