我在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");}
2 回答
qq_遁去的一_1
TA贡献1725条经验 获得超7个赞
有两件事:
由于您的程序只能运行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()方法中,并且您的设计将有所简化。
添加回答
举报
0/150
提交
取消