java - 使用 JFrame 的简单 GUI 动画

标签 java swing user-interface jframe

我覆盖了 JFrame 中的 setVisible() 函数。它所做的只是不断地扩大框架或缩小框架,直到它达到我想要的尺寸。这使得一个简单的动画。不过,我的问题是它不稳定,不平滑,并且如果框架移动则效果不佳。有什么方法可以使这种清洁剂更流畅、更光滑?

/**
 * Sets this window visible and also displays an effect when the window becomes
 * visible
 * @param visible True if the window should be visible, false otherwise
 */
@Override
public void setVisible(final boolean visible)
{
    final int effectSpeed = 5;

    if(effect == false)
    {
        super.setVisible(visible);
    }

    if(effect && visible)
    {
        super.setVisible(visible);
        //run the window opening effect
        new Thread(new Runnable()
        {
            public void run()
            {
                for (int i = 0; i <= parent.getHeight(); i = i + effectSpeed)
                {
                    setSize(getPreferredSize().width, i);
                    try
                    {
                        Thread.sleep(1);
                    }
                    catch (Exception e)
                    {
                    }
                }
            }
        }).start();
    }
    else if(effect && visible == false)
    {
        //run the window closing effect
        new Thread(new Runnable()
        {
            public void run()
            {
                for (int i = parent.getHeight(); i >= 0; i = i - effectSpeed)
                {
                    setSize(getPreferredSize().width, i);
                    try
                    {
                        Thread.sleep(1);
                    }
                    catch (Exception e)
                    {
                    }
                }
                DataWindow.super.setVisible(visible);
            }
        }).start();
    }
}

最佳答案

你应该使用 Swing Timers为此,而不是创建自己的线程。

关于java - 使用 JFrame 的简单 GUI 动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6412314/

相关文章:

java - 尝试节省内存有意义吗?

java - 将 JPanel 与 WindowBuilder 重叠用于 eclipse

java - 关闭主 JFrame

Java 图形用户界面布局

java - 非法参数异常 : Can not set UserTransaction field to ServerVMClientUserTransaction

java - 如何将 IRunnableWithProgress 始终带到前层?

java - SQL 返回搜索,即使检查不应该返回

java - 像 Java Swing 中的 GTK 一样垂直堆叠?

java - 打印前预览 JTextArea

ruby - 如何使用 Ruby Gtk 进行图像缩放和拖动选择?