0

我添加了一些JPanel设置为网格布局的组件,我正在添加JFrame设置为边框布局的组件。但我想修复面板的大小。当我的窗口最大化时,所有组件的大小都在增加。我希望面板位于窗口的中心,即使窗口最大化也具有固定大小。

4

3 回答 3

3

将面板GridLayout作为单个组件放入GridBagLayout没有约束的面板 - 它将居中。将带有 GBL 的面板添加CENTERBorderLayout.

有关上图,请参见此示例


嵌套布局示例还使用 GBL将图像居中在右侧滚动窗格的下部。

于 2012-05-25T06:31:08.970 回答
1

那么你不应该使用 BorderLayout,因为它只适合子组件。如果你仍然想在 JFrame 上使用 BoderLayout(因为你需要一些侧面板或类似的东西),你可以只包装你的 JPanel(使用 GridLayout ) 使用 GridBagLayout 或 BoxLayout 或类似的东西放入另一个 JPanel,然后将另一个 JPanel 放入 JFrame。

JPanel innerPanel = new JPanel();
innerPanel.setLayout(new GridLayout());
// fill and set your innerPanel

JPanel middlePanel = new JPanel();
middlePanel.setLayout(new GridBagLayout());
middlePanel.add(innerPanel, constraintsThatPlaceItWhereYouWantIt);

JFrame yourFrame = new JFrame();
yourFrame.setLayout(new BorderLayout());
yourFrame.add(middlePanel, BorderLayout.CENTER);
于 2012-05-25T06:36:55.350 回答
0
    JFrame frame = new JFrame();
    frame.setSize(500, 500);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().setLayout(new BorderLayout());

    JPanel rootPanel = new JPanel();
    frame.getContentPane().add(rootPanel, BorderLayout.CENTER);
    rootPanel.setLayout(new GridBagLayout());

    JPanel contentPanel = new JPanel();

    Dimension dimension = new Dimension(300, 300);
    contentPanel.setMaximumSize(dimension);
    contentPanel.setMinimumSize(dimension);
    contentPanel.setPreferredSize(dimension);
    contentPanel.setBackground(Color.YELLOW);

    GridBagConstraints g = new GridBagConstraints();
    g.gridx = 0;
    g.gridy = 0;
    g.anchor = GridBagConstraints.CENTER;
    rootPanel.add(contentPanel, g);

    frame.setVisible(true);
于 2012-05-25T06:32:14.633 回答