框架中的面板固定大小

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

0
额外 编辑
意见: 1
如果你提供了一些代码,它会更好。例如,我会查看您的代码以查看是否以及在哪里调用 setPreferredSize
额外 作者 Radu Murzea,
“请帮助我进行一些编码”请自己解决问题和任何努力的迹象。 SO不是代码生成机器。顺便说一句 - 不要使用代码格式的文本,并检查预期的后期格式。投票结束。
额外 作者 Andrew Thompson,
如果面板包含人类可读的文本,请不要这样做!字体指标因平台而异。
额外 作者 trashgod,

3 答案

将带有 GridLayout 的面板作为一个单独的组件放到一个没有约束的 GridBagLayout 中 - 它将居中。将带有GBL的面板添加到 BorderLayoutCENTER 中。

有关上述图片,请参阅此示例


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

3
额外
+1为漂亮的图片和简短的解决方案。
额外 作者 brimborium,

那么你不应该使用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);
1
额外
你是对的,但由于可读性的原因,我在添加时仍然总是施加限制。他可能会在安置方面做更多更先进的工作。
额外 作者 brimborium,
最后一行怎么样: yourFrame.add(middlePanel,BorderLayout.CENTER); ?你会跳过 BorderLayout.CENTER 吗?我不会,虽然这不是必要的。
额外 作者 brimborium,
middlePanel.add(innerPanel,constraintsThatPlaceItWhereYouWantIt); 查看我的回答,了解为什么 constraintsThatPlaceItWhereYouWantIt 对于将组件集中到GBL中是多余的。它链接到示例代码。
额外 作者 Andrew Thompson,
middlePanel.add(innerPanel/*放在中心* /); ;)
额外 作者 Andrew Thompson,
    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);
0
额外
至少在这种情况下它不会起作用。
额外 作者 brimborium,
1)使用代码格式2)这很少,如果有的话,答案。 -1
额外 作者 Andrew Thompson,