You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java Swing GridBagLayout布局问题:如何实现组件居中显示

解决GridBagLayout组件居中问题

要让按钮在westPanel中垂直水平都居中,你需要调整GridBagConstraints的几个关键属性,以下是修改后的代码和说明:

修改后的代码

private void setWestPanel() {
    westPanel = new JPanel();
    westPanel.setBackground(Color.GRAY);
    westPanel.setLayout(new GridBagLayout());
    westPanel.setPreferredSize(new Dimension(100, 100));
    GridBagConstraints gbc = new GridBagConstraints();
    gbc.insets = new Insets(5, 5, 5, 5);
    gbc.fill = GridBagConstraints.HORIZONTAL;
    // 设置组件在单元格内居中,同时分配垂直权重让布局管理器处理剩余空间
    gbc.anchor = GridBagConstraints.CENTER;
    gbc.weighty = 1.0;

    solveBtn = new JButton("Giải");
    resetBtn = new JButton("Xóa");
    exitBtn = new JButton("Thoát");

    solveBtn.setFocusable(false);
    resetBtn.setFocusable(false);
    exitBtn.setFocusable(false);

    solveBtn.setMnemonic('G');
    resetBtn.setMnemonic('X');
    exitBtn.setMnemonic('T');

    solveBtn.addActionListener(this);
    resetBtn.addActionListener(this);
    exitBtn.addActionListener(this);

    // 从gridy=0开始,避免顶部留空
    gbc.gridx = 0;
    gbc.gridy = 0;
    westPanel.add(solveBtn, gbc);

    gbc.gridx = 0;
    gbc.gridy = 1;
    westPanel.add(resetBtn, gbc);

    gbc.gridx = 0;
    gbc.gridy = 2;
    // 移除REMAINDER设置,避免按钮占据剩余所有垂直空间
    westPanel.add(exitBtn, gbc);

    add(westPanel, BorderLayout.WEST);
}

关键修改点

  • gbc.anchor = GridBagConstraints.CENTER:强制组件在其分配的单元格内居中显示,明确指定锚点才能确保位置符合预期。
  • gbc.weighty = 1.0:告诉GridBagLayout将面板的额外垂直空间分配给这些组件所在的行,让整个按钮组在面板垂直方向居中,而非挤在局部区域。
  • 调整gridy起始值:把按钮的gridy从1、2、3改为0、1、2,避免顶部空行导致组件位置偏移。
  • 移除gbc.gridheight = GridBagConstraints.REMAINDER:该设置会让exitBtn占据从当前行到最后一行的所有空间,拉长按钮并破坏居中效果。

内容的提问来源于stack exchange,提问作者Huỳnh Đức Phú

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 08:00:22