0

我有一个 JFrame,我需要在其中添加 2 个不同大小的 JPanel。我正在使用 BorderLayout。我设置了 Frame,以便有足够的空间让两个面板(尺寸已经设置)完美契合。然而,当它运行时,右边的第二个面板被压扁到一边,所以它真的很薄。

public class YourCraft extends JFrame {

public Game() {

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setSize(606, 500);

    setTitle("YourCraft");
    setResizable(false);
    setVisible(true);
    setBackground(Color.BLACK);
}

public static void main(String[] args) {
    Game main = new Game();

    Board mainBoard = new Board();
    Stats mainStats = new Stats();
    main.getContentPane().add(BorderLayout.CENTER,mainBoard);
    main.getContentPane().add(BorderLayout.EAST,mainStats);
}
4

2 回答 2

3

如果您要覆盖 JPanel,则同意使用 setPreferredSize 或 getPreferredSize 为 JPanel 提供首选大小,但同样重要的是,不要设置 JFrame 的大小,而是让其组件设置其最佳大小。正如 Snicolas 所提到的, pack() 方法将为您解决这个问题。

于 2011-06-12T22:57:02.883 回答
3

为您的组件指定一个首选尺寸。使用 setPreferredSize 为它们提供尺寸。

然后,在您的 JFrame 上调用 setVisible(true) 之前,使用方法 pack()。它将打包 JFrame 并提供足够的空间以确保尊重每个组件的首选大小(如果可能)。

问候, 斯蒂芬

于 2011-06-12T22:42:56.147 回答