根据实际JPanel包装JFrame,而不是父级

时间:2016-06-05 18:00:03

标签: java swing jframe jpanel cardlayout

我从Java Swing开始第二天。我遇到post简要解释了不建议使用多个JFrame的方法。根据答案,我开始使用CardLayout探索方式。

我的问题是当我拨打pack()唯一主JFrame时,它会根据主JPanel自动打包,其中包含CardLayoutJPanels在Netbeans GUI中创建,而不是根据我想要的实际选择JPanel

以下是我的主要课程Main的概述:

private static String[] PANELS = {"A", "B"};
private static JFrame frame;

public static void main(String... args) {
    SwingUtilities.invokeLater(new Runnable()
    {
        public void run()
        {
            new Main().initialize();
        }
    });
}

public void initialize() {

    JPanel cards = new JPanel(new CardLayout());
    JPanelA a = new JPanelA(cards);
    cards.add(a, PANELS[0]);

    Main.frame = new JFrame("GUI example");
    Main.frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    Main.frame.add(cards);
    Main.frame.pack();
    Main.frame.setLocationByPlatform(true);
    Main.frame.setVisible(true);

    JPanelB b = new JPanelB(cards);
    cards.add(b, PANELS[1]);
}   

public static JFrame getFrame() {
    return Main.frame;
}

public static String getPanel(int i) {
    return PANELS[i];
}

每个JPanel都是在NetBeans GUI中创建的,具有以下内容:

public JPanelA(JPanel parent) {
    initComponents();
    this.parent = parent;
    run();
}

private void run() {
    jButton.addActionListener((ActionEvent ae) -> {
        Main.getFrame().pack(); // nothing happens
        CardLayout cl = (CardLayout) parent.getLayout();
        cl.show(parent, Main.getPanel(1));
        //Main.getFrame().pack(); // neither anything happens
    });
}

主要逻辑JFrame包含使用JPanel cards构建的主CardLayout,其中包含JPanelA aJPanelB bJPanelA a是起始点。

如何切换面板尺寸,而不是最大尺寸?这通常是从Java Swing和以下应用开始的好方法吗?

0 个答案:

没有答案