如果setBounds方法不在for循环中,但是我将其放在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);
            }

        }
    });

最佳答案

您正在UI线程中执行此操作,这意味着在循环完成之前,UI中没有任何机会对其进行反应...只有最后一个setBounds调用才真正具有可见效果。

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

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

10-07 19:36