java GUI 设置卡片布局框架大小

java GUI set cardlayout frame size

所以我正在尝试学习如何使用卡片布局,在此示例代码中我想将框架的大小更改为特定大小,但使用 setSize 不起作用。

以下在添加到 createAndShowGui() 函数时也不起作用

frame.setExtendedState(JFrame.MAXIMIZED_BOTH);

frame.setPreferredSize(新维度(500,200));

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.setSize(550, 300);
        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));
    }
}

I would like to change the size of the frame to a certain size

不要尝试对帧大小进行硬编码。

如果你想在面板周围增加 space,那么在 MainGui2 的构造函数中 class 你可以添加:

setBorder( new EmptyBorder(50, 50, 50, 50) );

这将调整面板的首选大小,现在在使用 pack() 方法时会考虑该大小。