Hinzufügen der JPanels aus anderen Klassen zum cardLayout

Ich habe 3 Fenster in 3 getrennten Klassen, und ich möchte cardLayout verwenden, so dass, wenn Sie auf die Schaltfläche weiter klicken, im nächsten Fenster wird angezeigt. Wie füge ich JPanels mit verschiedenen Elementen zu einem cardLayout? Dies ist das erste Fenster: (der einzige Unterschied ist der hintergrund, aber es steht für die Idee, wie ich es eigentlich)

public class Window1 extends JPanel implements ActionListener {

static CardLayout cardLayout = new CardLayout();

public Window1() {
   init();
}

private void init() {
    JPanel jp = new JPanel(new BorderLayout());
    JPanel jp2 = new Window2();
    //JPanel jp3 = new Window3();
    JLabel textLabel = new JLabel("Window1");
    jp.setBackground(Color.GREEN);
    jp.add(textLabel, BorderLayout.CENTER);
    JButton nextButton = new JButton("NEXT");
    nextButton.setActionCommand("next");
    nextButton.addActionListener(this);
    jp.add(nextButton, BorderLayout.EAST);
    setLayout(cardLayout);
    add(jp, "string");
    add(jp2, "string");
    //add(jp3, "string");
}

public void actionPerformed(ActionEvent e) {            
    if (e.getActionCommand().equalsIgnoreCase("next")) {
    //go to the next window
        cardLayout.next(this);
    }
}

private static void createAndShowGUI() {        
      JFrame frame = new JFrame("test");
      frame.getContentPane().setLayout(Window1.cardLayout);
      frame.getContentPane().add(new Window1(), "Center");
      frame.getContentPane().add(new Window2(), "Center");
      frame.getContentPane().add(new Window3(), "Center");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.setSize(550, 450);
      frame.setVisible(true); 
}


public static void main(String[] args) {
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            createAndShowGUI();
        }           
    });
}
}

Zweiten Fenster:

public class Window2 extends JPanel implements ActionListener {

//static CardLayout cardLayout = new CardLayout();

public Window2() {
   init();
}

private void init() {
    setLayout(new BorderLayout());
    JLabel textLabel = new JLabel("Window2");
    setBackground(Color.RED);
    add(textLabel, BorderLayout.CENTER);
    JButton nextButton = new JButton("NEXT");
    nextButton.setActionCommand("next");
    nextButton.addActionListener(this);
    add(nextButton, BorderLayout.EAST);
    //setLayout(cardLayout);
    //JPanel jp3 = new Window3();
    //add(jp3, "string");
}

public void actionPerformed(ActionEvent e) {            
    if (e.getActionCommand().equalsIgnoreCase("next")) {
    //go to the next window??
        System.out.println("window2");
        Window1.cardLayout.next(this);
    }
}

}

Und die Letzte:

public class Window3 extends JPanel implements ActionListener {

public Window3() {
   init();
}

private void init() {
    setLayout(new BorderLayout());
    JLabel textLabel = new JLabel("Window3");
    setBackground(Color.BLUE);
    add(textLabel, BorderLayout.CENTER);
    JButton nextButton = new JButton("NEXT");
    nextButton.setActionCommand("next");
    nextButton.addActionListener(this);
    add(nextButton, BorderLayout.EAST);
}

public void actionPerformed(ActionEvent e) {            
    if (e.getActionCommand().equalsIgnoreCase("next")) {
    //go to the next window
    // Window1.cardLayout.next(this);
    }
}

}
  • Beenden Sie multiposting Fragen: stackoverflow.com/questions/9322474/.... Sie haben ein funktionierendes Beispiel aus dem Swing-tutorial, und es wurde erklärt, wie zu trennen die panel aus der gleichen Klasse also, warum haben Sie umbuchen die gleiche code, den Sie vorher hatte? Sie haben nicht zugehört jeder der die Ratschläge aus deinem letzten posting.
  • Ganz einfach, weil ich immer noch nicht bekommen kann es arbeiten. Und noch problem liegt in der Verknüpfung zusammen, ich glaube, da bekomme ich Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: wrong parent for CardLayout
  • Als ich sagte, Sie nicht posten Sie Ihre SSCCE zeigen Sie Ihren Versuch. So umbuchen der Frage nicht geben uns keine neuen Informationen. Es werden nur Abfälle unserer Zeit.
  • Ich bin immer noch lernen, sorry... ich dachte, die umgebucht Frage ist eher wie SSCCE als die Vorherige. Auch habe ich das Gefühl, ich bin fast da, nur brauchen, um zu wissen, wie die Verknüpfung zwischen den Klassen Aussehen sollte.
  • Ich schlug vor, wie Sie Vorgehen sollten, die in Ihrer letzten Frage. Beginnen Sie mit etwas, das funktioniert (das tutorial demo), und entfernen Sie dann die "Systemsteuerung-code" aus der main-Klasse erstellen, eigene Quelle/class-Dateien. Ich selbst gab Ihnen den code zu verwenden. Der code, den Sie geschrieben sieht nichts, wie die demo-code oder den code, den ich vorgeschlagen. Der Punkt, der eine SSCCE ist zu einfach starten, um das Konzept zu verstehen. Sobald Sie das Konzept verstehen Sie die Kenntnisse, die zu Ihrer richtigen Anwendung.
  • Vergessen Sie über das hinzufügen von next/previous-Tasten auf dem Bedienfeld. Holen Sie sich den code, arbeiten mit der Combo-Box auswählen, welche panel-display. Dann wenn das funktioniert, ersetzen Sie die combo-box mit den next/previous-Tasten. Sie müssen nicht fügen Sie Schaltflächen, um jedes einzelne panel.
  • Vielen Dank, die combo-box-Beispiel funktioniert. Jetzt werde ich versuchen, es zu ersetzen mit den Schaltflächen weiter und zurück. Aber ich weiss nicht, wie ich don ' T müssen Tasten auf jeder Tafel, wenn Sie die windows ändern und nur der erste würde einen button?
  • In der demo der combo-box ist in einem panel Hinzugefügt werden, ist die NORD-oder BorderLayout. Das ZENTRUM des BorderLayout besitzt das panel mit dem CardLayout, die enthält alle Ihre anderen Platten. Da Sie nur ersetzen die combo-box mit den Tasten, verbleiben Sie in der NORTH-panel. Deshalb Hauptrahmen hat Zugriff auf die Tasten und das Bedienfeld über das Karten-layout, so dass die ActionListeners für Ihre Schaltflächen können nur den Zugriff auf die next() previous () - Methode des Layouts. Sie brauchen nicht, um irgendwelche Kenntnisse über die panels Hinzugefügt, um das Karten-layout.
  • +1 für die Tatsache, dass diese Frage half mir, mich berühren, CardLayout, die ich immer verlassen, die für einen oder anderen Grund 🙂

InformationsquelleAutor Hurdler | 2012-02-17
Schreibe einen Kommentar