为了账号安全,请及时绑定邮箱和手机立即绑定

将其他类的JPanels添加到cardLayout

将其他类的JPanels添加到cardLayout

PIPIONE 2019-11-04 12:56:59
我在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()方法中,并且您的设计将有所简化。


查看完整回答
反对 回复 2019-11-04
  • 2 回答
  • 0 关注
  • 273 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信