为什么JButton.setBounds不能在for循环中工作?

时间:2013-12-29 08:42:49

标签: java swing animation jbutton mouselistener

如果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);
            }

        }
    });

1 个答案:

答案 0 :(得分:3)

你在UI线程中这样做,这意味着在循环结束之前,UI中的任何内容都没有机会对它作出反应...只有最后一次setBounds调用才真正具有任何可见效果。

如果您正在尝试执行动画,则需要使用某些描述的计时器,以便您可以反复进行小的更改,等待(不阻止UI线程),然后进行其他更改等。(您可能不想使用setBounds,但这是一个稍微不同的事情。) 请注意,您仍然需要在UI线程上进行更改,因为它们是UI更改 - 您只需要让UI 对更改做出反应,然后再创建下一个。

有关更多信息和示例,请参阅tutorial on Swing timers