您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

在JFrame中实现CardLayout并根据特定的按钮按下来切换卡

在JFrame中实现CardLayout并根据特定的按钮按下来切换卡

您创建了一个使用cardlayout和卡片的JPanel,但是没有添加任何内容,因此它当然不会显示自身,也不会显示卡片。解决方案:将此JPanel添加到您的GUI。

所以代替:

main.setContentPane(welcomePanel());

做:

main.setContentPane(cards);

问题编号2:

将字符串用作键的类型时,请使用字符串常量。请注意,您因此将一个JPanel添加到卡JPanel中:

cards.add(home, "Home");

但是,然后尝试像这样显示它:

cl.show(cards, "home");

但是“家”与“家”不同。

而是声明一个常量HOME:

public static final String HOME = "home";

并使用相同的常量添加显示JPanel。

一个简单的例子:

import java.awt.cardlayout;
import java.awt.event.ActionEvent;

import javax.swing.*;

public class MainGui2 extends JPanel {
    private cardlayout cardlayout = new cardlayout();
    private WelcomePanel welcomePanel = new WelcomePanel(this);
    private HomePanel homePanel = new HomePanel();

    public MainGui2() {
        setLayout(cardlayout);
        add(welcomePanel, WelcomePanel.NAME);
        add(homePanel, HomePanel.NAME);
    }

    public void showCard(String name) {
        cardlayout.show(this, name);
    }

    private static void createAndShowGui() {
        MainGui2 mainPanel = new MainGui2();

        JFrame frame = new JFrame("MainGui2");
        frame.setDefaultCloSEOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.getContentPane().add(mainPanel);
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokelater(new Runnable() {
            public void run() {
                createAndShowGui();
            }
        });
    }

}

class WelcomePanel extends JPanel {
    public static final String NAME = "welcome panel";
    private MainGui2 mainGui2;

    public WelcomePanel(final MainGui2 mainGui2) {
        this.mainGui2 = mainGui2;
        add(new JLabel(NAME));
        add(new JButton(new AbstractAction("logon") {

            @Override
            public void actionPerformed(ActionEvent e) {
                mainGui2.showCard(HomePanel.NAME);
            }
        }));
    }
}

class HomePanel extends JPanel {
    public static final String NAME = "home panel";

    public HomePanel() {
        add(new JLabel(NAME));
    }
}
其他 2022/1/1 18:25:22 有729人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶