Question

I'm writing a simple program using CardLayout. The main screen should display a button which when pressed would go to the next screen which contains another button for another screen. My problem is that when I run my program the screen is black. I tried following tutorials online to write my own program but I don't seem to find the problem with my code. I don't get any errors when run. Here is my code

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

        }
    }

}

/*way to use CardLayout: create a CardLayout manager and create a bunch of different JPanels which * would each be a different screen. Make a panel that stores the CardLayout as the layout. * Add the different elements to each Panel(buttons, textfields) and then add the panels to the JPanel that stores * the CardLayout */

import javax.swing.JFrame;

public class CardTest {
    public static void main(String[] args) {

        CL object = new CL();
        object.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        object.setSize(400, 400);
        object.setVisible(true);

    }
}

It might be something simple but I'm not sure of what it is. Some advice would be appreciated.

Was it helpful?

Solution

Make sure you add your panels to the frame

    add(cardPanel);

Without that no components will be shown

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top