2016-05-07 42 views
1

我有两个JPanels,我想在用户点击它们时切换。如何在CardLayout中的JPanel之间切换?

所以我创建了一个Window其中JFrame。然后我创建一个名为cardsJPanel,并将其布局设置为CardLayout。然后再创建两个JPanel - 这些是我想要切换的面板 - 并将它们添加到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); 
    } 

} 

为什么它不工作?

回答

4

您已将2 MouseListeners添加到同一个面板,可有效地取消拨打CardLayout.next的电话。更换的

panel1.addMouseListener(new MouseAdapter() { 

一个与

panel2.addMouseListener(new MouseAdapter() { 
+0

谢谢。多烦人的错误。我想我并没有很好地说明我的变量。 –