Singleton mit CardLayout zeigt keine Karte an, wenn eine andere Klasse Singleton.instance.show () aufruft

public class MainWindow extends JPanel {

public static MainWindow instance = new MainWindow();

private CardLayout cards = new CardLayout();

public MainWindow() {
    setLayout(cards);
    add(new FirstPage(), Pages.FIRST.toString());
    add(new SecondPage(), Pages.SECOND.toString());
    add(new ThirdPage(), Pages.THIRD.toString());
}

public void showPage(Pages page) {
    cards.show(this, page.toString());
}

}

dasshowPage(page); Methode funktioniert gut, wenn ich es im Konstruktor von aufrufenMainWindow. Aber wenn ich versuche anzurufenMainWindow.instance.showPage(Pages.SECOND); von einem ActionListener inFirstPage nichts passiert. Ich habe das überprüftshowPage(page) Methode funktioniert korrekt. Ich habe überprüft, ob das ActionEvent ausgelöst wurde und die richtige if / else-Klausel eingegeben. Was mache ich falsch? Warum wird meine zweite Seite nicht angezeigt?

public class FirstPage extends JPanel {

    private JButton showSecond = new JButton("Show Second");
    private JButton showThird = new JButton("Show Third");

    public FirstPage() {
        insertButton(showSecond);
        insertButton(showThird);
    }

    private void insertButton(JButton button) {
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if (e.getSource() == showSecond) {
                    MainWindow.instance.showPage(Pages.SECOND);
                } else {
                    MainWindow.instance.showPage(Pages.THIRD);
                }
            }
        });
        this.add(button);
    }
}

Antworten auf die Frage(1)

Ihre Antwort auf die Frage