2016-05-07 9 views
1

Ich habe zwei JPanels, zwischen denen ich wechseln möchte, wenn der Benutzer darauf klickt.Wie man zwischen JPanels in CardLayout wechselt?

Also habe ich ein Window mit einem JFrame darin erstellt. Dann erstelle ich einen JPanel namens cards und setze sein Layout auf CardLayout. Dann erstelle ich zwei weitere JPanel s - das sind die Panels, zwischen denen ich wechseln möchte - und ich füge sie zu cards hinzu. Ich füge mouseClicked Event-Listener hinzu und ich füge cardLayout.next(cards) hinzu, damit der Schalter geschieht. Es funktioniert nicht.

Hier ist mein Code:

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); 
    } 

} 

Warum es nicht funktioniert?

Antwort

4

Sie haben 2 MouseListeners zu demselben Panel hinzugefügt, das den Anruf zu CardLayout.next effektiv löscht. Ersetzen eines

panel1.addMouseListener(new MouseAdapter() { 

mit

panel2.addMouseListener(new MouseAdapter() { 
+0

Danke. Was für ein nerviger Fehler. Ich nehme an, dass ich meine Variablen von Anfang an nicht gut benannt habe. –