【发布时间】:2012-07-05 11:43:47
【问题描述】:
我正在尝试使用幻灯片效果更改卡片布局中的当前可见性。但是我在幻灯片的开头看到了一个我无法调试/解决的轻弹。我怎样才能避免这种轻弹?
这里是重现错误的示例代码:
import java.awt.CardLayout;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Main {
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel(new CardLayout());
JLabel label1 = new JLabel("Harry Joy");
panel.add(label1, "1");
JLabel label2 = new JLabel("Harsh Raval");
panel.add(label2, "2");
frame.add(panel);
frame.pack();
frame.setVisible(true);
for (int i = 0; i < 10; i++) {
try {
Thread.sleep(500L);
} catch (InterruptedException e) {
e.printStackTrace();
}
label2.setLocation(label1.getX() + 10 - label1.getWidth(), label1.getY());
label1.setLocation(label1.getX() + 10, label1.getY());
label2.setVisible(true);
}
label2.setVisible(false);
CardLayout cl = (CardLayout)panel.getLayout();
cl.next(panel);
}
}
这里首先显示label1("Harry Joy")。然后我使label2("Harsh Raval") 可见并尝试更改两者的位置以提供幻灯片效果。但是这里发生的是第一次两个标签都显示在彼此的顶部,然后它开始滑动。我怎么能阻止这种情况,我的意思是把两个标签放在一起显示?如果你运行一次,你就能更好地理解我的意思。
【问题讨论】:
-
“这里是 SSCCE:” 嗯.. 没有。 SSCCE 需要格式良好的类和
main()(除非是小程序)。 -
这不是 SSCCE,因为没有 main 和 import。您的示例仅在 EDT 用完时才“有效”,这是一个坏主意。
-
查看this answer。它可能会给你一些想法..
-
@AndrewThompson 嗯.. 这是幻灯片效果的一个很好的例子。我会使用它,但我仍然很想知道我所面临的原因。如果你能照亮它?
-
两个面板可以动画
JSplitPane,如图here。
标签: java swing cardlayout