慢慢增加jButton大小

时间:2015-11-06 17:44:23

标签: java interface jbutton

您好我试图在学校的项目界面上做类似码头的效果。当我将鼠标悬停在它们上面时,我只需要几个按钮就可以更大,我已经成功实现了这一点。问题是它立即发生,而我希望它是原始大小和新大小之间的缓慢过渡。这就是我试图做的事情:

public void biggerButton(JButton boton) {
    Runnable runnable = new Runnable() {
        @Override
        public void run() {
            int i = 0;
            while ( i < 10) {
                boton.setSize(i + boton.getWidth(), i + boton.getHeight());
                try {
                    Thread.sleep(100);
                } catch (InterruptedException ex) {
                }
                i++;
            }
        }
    };
    runnable.run();
}

当鼠标进入放置在容器上的按钮时,代码会运行。如果有人能帮助我,我会非常感激。感谢

1 个答案:

答案 0 :(得分:1)

至少需要在事件派发线程上放置影响Swing组件的代码:

while (i < 10)
    {
    final int adjustment = i;
    SwingUtilities.invokeLater( new Runnable()
            {
            @Override
            public void run()
                {
                boton.setSize(adjustment + boton.getWidth(), adjustment + boton.getHeight());
                }
            });
    }

如果您使用的是Java 8,那么lambdas会使这段代码变得更好:

while (i < 10)
    {
    final int adjustment = i;
    SwingUtilities.invokeLater( () ->
            { boton.setSize(adjustment + boton.getWidth(), adjustment + boton.getHeight()); }
    }

与我使用的所有GUI工具包一样,Swing不是线程安全的,因此只能在事件线程上进行更改。

另请注意,每步只增加1个像素,总共10个像素。这可能不是很明显。