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

标签 java swing animation jbutton mouselistener

如果 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 中的任何内容都没有机会对其使用react...只有最后一个 setBounds 调用才会真正有任何反应效果看得见。

如果您尝试执行动画,则需要使用某种描述的计时器,以便您可以重复进行小的更改,等待(不阻塞 UI 线程),然后进行另一个更改等。(您无论如何,可能不想使用 setBounds ,但这是一个稍微不同的问题。) 请注意,您仍然需要在 UI 线程上进行更改,因为它们是 UI 更改 - 您只需让 UI 对更改使用react,然后再进行下一个更改。

请参阅tutorial on Swing timers了解更多信息和示例。

关于java - 为什么 JButton.setBounds 不能在 for 循环中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20823511/

相关文章:

java - jtable 中不显示水平滚动条。如何让柱子停止收缩?

java - 如何创建具有不同 react 的 JcomboBox?

ios - UIView 旋转时消失

java - 在 Akka 中编排 child Actor

java - 使用 JavaCompiler 编译 Minecraft

Java - 图标未对齐的 JLabel(向右)

html - css动画中的反变换

android - 支持忽略插值器的 fragment 自定义动画

java - 我应该实现抽象类中存在的所有方法吗?

java - dtype 列太短,无法容纳类名