カード レイアウトで現在表示されているスライド効果を変更しようとしています。しかし、スライドの最初にフリックがあり、デバッグ/解決できません。どうすればそのフリックを回避できますか?
エラーを再現するサンプルコードは次のとおりです。
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
(「ハリー・ジョイ」)が表示されます。次に、label2
("Harsh Raval") を表示し、両方の位置を変更してスライド効果を出そうとします。しかし、ここで何が起こっているかというと、最初に両方のラベルが重ねて表示され、次にスライドし始めます。どうすればそれを止めることができますか?つまり、両方のラベルを重ねて表示するということですか? 一度実行すると、私が意味することをよりよく理解できます。