Java 如何显示不同的屏幕

Java 如何显示不同的屏幕,java,user-interface,cardlayout,Java,User Interface,Cardlayout,我正在用CardLayout编写一个简单的程序。主屏幕应显示一个按钮,按下该按钮后将转到下一屏幕,该屏幕包含另一屏幕的另一个按钮。我的问题是,当我运行我的程序时,屏幕是黑色的。我试着按照在线教程编写自己的程序,但我似乎没有发现代码的问题。运行时我没有收到任何错误。这是我的密码 //using CardLayout to change screen when action is performed import javax.swing.JFrame; import javax.swing.JTex

我正在用CardLayout编写一个简单的程序。主屏幕应显示一个按钮,按下该按钮后将转到下一屏幕,该屏幕包含另一屏幕的另一个按钮。我的问题是,当我运行我的程序时,屏幕是黑色的。我试着按照在线教程编写自己的程序,但我似乎没有发现代码的问题。运行时我没有收到任何错误。这是我的密码

//using CardLayout to change screen when action is performed
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.JLabel;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.Popup;
import javax.swing.JOptionPane;

import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.FlowLayout;

public class CL extends JFrame {

    JPanel cardPanel;
    JPanel cardPanelA;
    JPanel cardPanelB;//to set different screens
    CardLayout cl;
    private JButton button1;
    private JButton button2;
    private JButton change;
    private JLabel label;
    private JTextField textField1;
    private JTextField textField2;
    JButton button;

    public CL() {
        super("This is a sample");

        cardPanel = new JPanel();
        cardPanelA = new JPanel();
        cardPanelB = new JPanel();

        cl = new CardLayout();
        cardPanel.setLayout(cl);

        button1 = new JButton("button1");
        button2 = new JButton("button2");
        change = new JButton("change screen");
        label = new JLabel("this is a label");
        textField1 = new JTextField(10);
        textField2 = new JTextField("enter text", 6);

        cardPanelA.add(change);
        cardPanelA.add(label);
        cardPanelA.add(textField1);
        cardPanelA.add(textField2);
        cardPanelB.add(button1);
        cardPanelB.add(button2);

        cardPanel.add(cardPanelA);
        cardPanel.add(cardPanelB);

        JPanel panel1 = new JPanel();
        button = new JButton("initial button");
        panel1.add(button);

        theHandler handler = new theHandler();//make action listener
        change.addActionListener(handler);
        button1.addActionListener(handler);
        button2.addActionListener(handler);
        button.addActionListener(handler);
        /*
        getContentPane().add(panel1, BorderLayout.NORTH);
        getContentPane().add(cardPanelA, BorderLayout.NORTH);
        getContentPane().add(cardPanelB, BorderLayout.NORTH);
        */
    }

    private class theHandler implements ActionListener {
        public void actionPerformed(ActionEvent event) {

            if (event.getSource() == button) {
                cl.show(cardPanel, "Panel A");
            }
            if (event.getSource() == change) {
                cl.show(cardPanelB, "panelB");
            }
            if (event.getSource() == button2) {
                cl.show(cardPanel, "PanelA");
            }
            if (event.getSource() == button1) {
                JOptionPane.showMessageDialog(null, "this is the second screen");
            }

        }
    }

}
/*使用CardLayout的方法:创建一个CardLayout管理器并创建一组不同的JPanel *每个屏幕都将是不同的。制作一个将CardLayout存储为布局的面板。 *将不同的元素添加到每个面板(按钮、文本字段),然后将面板添加到存储 *卡片布局 */


它可能很简单,但我不确定它是什么。如能提供一些建议,将不胜感激

确保将面板添加到框架中

    add(cardPanel);

如果不这样做,就不会显示任何组件

这可能是一个愚蠢的建议,但请确保通过事件调度线程运行所有GUI代码。我以前在我那台又旧又慢的上网本上遇到过问题,但我没有。我相信其中一个症状就是所有东西都变黑了,尽管我记不清了。谢谢你,我知道这很简单。我忘记做的一件事是给不同的面板加上一个名字。例如,在上面的代码中,我有cardPanel.add(cardPanelA);我应该有cardPanel.add(cardPanelA,字符串名);在调用事件处理程序以了解我所说的窗口时,是否有其他方法调用特定窗口。例如,我正在使用cl.show(cardPanelA,“PanelA”),我可以用其他东西代替“PanelA”而不是给每个面板命名吗?
    add(cardPanel);