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

Java Swing布局如何实现两个标签分别占可用水平空间30%与70%

实现两个JLabel按总可用水平空间3:7分配的方案

用GridBagLayout可以满足你的需求,核心是正确配置GridBagConstraints的权重和填充属性,最终会严格按照总水平宽度的30%、70%分配空间,长文本的标签会自动截断显示省略号。

修改后的完整代码如下:

import javax.swing.*;
import java.awt.*;

public class LabelRatioDemo {
    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(200, 200);
        // 把面板布局改为GridBagLayout
        JPanel panel = new JPanel(new GridBagLayout());
        GridBagConstraints gbc = new GridBagConstraints();
        gbc.fill = GridBagConstraints.HORIZONTAL; // 水平方向占满分配的空间
        gbc.insets = new Insets(5,5,5,5); // 可选,添加边距避免文字贴边

        // 30% 宽度的标签
        gbc.weightx = 0.3; // 占总水平空间的30%
        JLabel label30 = new JLabel("Very long sentence that should be cut off");
        panel.add(label30, gbc);

        // 70% 宽度的标签
        gbc.weightx = 0.7; // 占总水平空间的70%
        JLabel label70 = new JLabel("Text");
        panel.add(label70, gbc);

        frame.setContentPane(panel);
        frame.setVisible(true);
    }
}

关键配置说明

  • weightx属性两个值相加为1,GridBagLayout会直接按比例分配整个容器的总水平空间,不是剩余空间,符合你要求的绝对占比
  • fill = GridBagConstraints.HORIZONTAL确保标签会填满分配到的水平宽度,不会因为内容短就收缩
  • JLabel默认超出显示宽度的文本会自动显示省略号,不需要额外做文本截断处理,拖拽窗口改变大小也会保持3:7的比例不变。

内容的提问来源于stack exchange,提问作者David S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 12:36:03