2016-05-07 7 views
1

ユーザーがクリックしたときに切り替えるJPanelが2つあります。CardLayoutのJPanelを切り替える方法は?

WindowJFrameで作成しました。次に、cardsというJPanelを作成し、レイアウトをCardLayoutに設定します。次に、私はJPanelを2つ作成します。これは、切り替えたいパネルです。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

CardLayout.nextへの呼び出しを効果的にキャンセルする同じパネルに2 MouseListenersを追加しました。

panel2.addMouseListener(new MouseAdapter() { 
+0

panel1.addMouseListener(new MouseAdapter() { 

の1を交換していただきありがとうございます。厄介なバグ。私は最初に変数をうまく指定しなかったと思います。 –

関連する問題