如何在 CardLayout 中的 JPanel 之间切换?
How to switch between JPanels in CardLayout?
我有两个 JPanel,当用户单击它们时我想在它们之间切换。
所以我创建了一个 Window
,里面有一个 JFrame
。然后我创建一个名为 cards
的 JPanel
并将其布局设置为 CardLayout
。然后我再创建两个 JPanel
s - 这些是我想在它们之间切换的面板 - 我将它们添加到 cards
。我添加了 mouseClicked
事件侦听器并添加了 cardLayout.next(cards)
以便切换发生。没用。
这是我的代码:
public class Window {
private JFrame frame;
private JPanel cards;
private JPanel panel1;
private JPanel panel2;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Window window = new Window();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public Window() {
initialize();
}
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 790, 483);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
cards = new JPanel();
cards.setLayout(new CardLayout());
panel1 = new JPanel();
panel1.setBackground(Color.BLACK);
panel1.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e){
java.awt.Toolkit.getDefaultToolkit().beep(); //debug beep
CardLayout cl = (CardLayout) cards.getLayout();
cl.next(cards);
}
});
panel2 = new JPanel();
panel2.setBackground(Color.WHITE);
panel1.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e){
CardLayout cl = (CardLayout) cards.getLayout();
cl.next(cards);
}
});
cards.add(panel1, "panel1");
cards.add(panel2, "panel2");
frame.getContentPane().add(cards);
}
}
为什么不起作用?
您已将 2 MouseListeners
添加到同一个面板,这有效地取消了对 CardLayout.next
的调用。替换其中一个
panel1.addMouseListener(new MouseAdapter() {
和
panel2.addMouseListener(new MouseAdapter() {
我有两个 JPanel,当用户单击它们时我想在它们之间切换。
所以我创建了一个 Window
,里面有一个 JFrame
。然后我创建一个名为 cards
的 JPanel
并将其布局设置为 CardLayout
。然后我再创建两个 JPanel
s - 这些是我想在它们之间切换的面板 - 我将它们添加到 cards
。我添加了 mouseClicked
事件侦听器并添加了 cardLayout.next(cards)
以便切换发生。没用。
这是我的代码:
public class Window {
private JFrame frame;
private JPanel cards;
private JPanel panel1;
private JPanel panel2;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Window window = new Window();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public Window() {
initialize();
}
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 790, 483);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
cards = new JPanel();
cards.setLayout(new CardLayout());
panel1 = new JPanel();
panel1.setBackground(Color.BLACK);
panel1.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e){
java.awt.Toolkit.getDefaultToolkit().beep(); //debug beep
CardLayout cl = (CardLayout) cards.getLayout();
cl.next(cards);
}
});
panel2 = new JPanel();
panel2.setBackground(Color.WHITE);
panel1.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e){
CardLayout cl = (CardLayout) cards.getLayout();
cl.next(cards);
}
});
cards.add(panel1, "panel1");
cards.add(panel2, "panel2");
frame.getContentPane().add(cards);
}
}
为什么不起作用?
您已将 2 MouseListeners
添加到同一个面板,这有效地取消了对 CardLayout.next
的调用。替换其中一个
panel1.addMouseListener(new MouseAdapter() {
和
panel2.addMouseListener(new MouseAdapter() {