我覆盖了 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/