如何把相同的JLabel两次
问题描述:
我试图用JFrame和JPanel创建一个“gif”,我有一个循环“gif”的问题。 这是做了“GIF”的部分代码:如何把相同的JLabel两次
JFrame mainFrame = new JFrame("main");
mainFrame.setSize(newWidth, newHeight);
mainFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
for (int i = 0; i < labels.length; i++) {
mainFrame.add(labels[i]);
mainFrame.setVisible(true);
TimeUnit.SECONDS.sleep(delay);
mainFrame.remove(labels[i]);
}
它只运行一次,但是当我调试它表明,它一直运行
答
您需要添加
mainFrame.revalidate();
mainFrame.repaint();
后
mainFrame.add(labels[i]);
和
后mainFrame.remove(labels[i]);
此外,我想推荐您阅读约Event Dispatcher Thread。
也许我有糟糕的一天,但不明白 –
标题和问题似乎完全无关。另外,为什么这个运行不止一次?循环运行一次,并在它添加并删除它终止的所有标签之后运行。 如果您希望它无限期运行,请使用while(true){}或更好的while(notTerminated){}环绕循环,以便您可以将notTerminated设置为false,例如通过点击一个按钮... – tringel
首先,你不能在Swing应用中使用'sleep()'。如果你想提供延迟,你应该使用'javax.swing.Tmer'。有关更多信息,请参阅[此处](https://docs.oracle.com/javase/tutorial/uiswing/concurrency/index.html)。其次:不能将一个Swing组件放置两次。如果第二次添加Swing组件,它将从第一次添加Swing组件的位置移除。如果您仍然需要帮助,请提供一个可运行的示例([SSCCE](http://sscce.org)),因此我们也可以重现您的问题并调试解决方案。 –