猿问

将其他类的JPanels添加到cardLayout

我在3个单独的类中有3个窗口,我想使用cardLayout,以便当您单击next按钮时,将出现下一个窗口。如何将包含不同元素的JPanels添加到一个cardLayout?这是第一个窗口:(尽管唯一的区别是背景-但它代表了我实际得到它的想法)


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

        }           

    });

}

}

第二个窗口:


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

}

PIPIONE
浏览 274回答 2
2回答

qq_遁去的一_1

有两件事:由于您的程序只能运行main一种方法,因此每个类都不需要一个方法,但是无论您运行哪种方法,都应为要添加到的每个面板创建一个实例CardLayout。您似乎也根本没有将Windows 添加到您CardLayout的。您可以尝试以下操作(未完成)。仅在一类中需要:private static void createAndShowGUI() {          JFrame frame = new JFrame("test");  frame.getContentPane().setLayout(Window1.cardLayout);  frame.getContentPane().add(new Window1());  frame.getContentPane().add(new Window2());  frame.getContentPane().add(new Window3());  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  frame.setSize(550, 450);  frame.setVisible(true); }此外(这可能只是由于示例的简单性),我只有1个类,它将使用面板的名称和构造器的背景颜色。这些可以传递到您的init()方法中,并且您的设计将有所简化。
随时随地看视频慕课网APP

相关分类

Java
我要回答