微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

BoxLayout 面板内的项目不占用 JPanel 的宽度

如何解决BoxLayout 面板内的项目不占用 JPanel 的宽度

面板下方有BoxLayout,底部的按钮不占用面板的宽度,而是在左侧和右侧有间隙。

enter image description here

    JPanel panel = new JPanel();
    BoxLayout Boxlayout = new BoxLayout(panel,BoxLayout.Y_AXIS);
    panel.setLayout(Boxlayout);

    JPanel framesPanel[] = new JPanel[8];
    
    for(int i=0;i<8;i++) {
        framesPanel[i] = new JPanel();
        framesPanel[i].setLayout(new BoxLayout(framesPanel[i],BoxLayout.X_AXIS));

        JButton jb1 = new JButton("Button 1");
        jb1.setAlignmentX(Component.LEFT_ALIGNMENT);
        JButton jb2 = new JButton("Button 2");
        jb2.setAlignmentX(Component.LEFT_ALIGNMENT);

        JButton jb3 = null;

        framesPanel[i].add(jb1);
        framesPanel[i].add(jb2);

        if (i < 6) {
            jb3 = new JButton("Button 3");
            jb3.setAlignmentX(Component.LEFT_ALIGNMENT);
            framesPanel[i].add(jb3);
        }
        panel.add(framesPanel[i]);
    }


    // Set size for the frame
    panel.setSize(300,300);
    frame.setSize(300,300);

    // Set the window to be visible as the default to be false
    frame.add(panel);

我尝试过 setAlignmentX(Component.LEFT_ALIGNMENT) 但这似乎没有任何效果

解决方法

A BoxLayout 尊重组件的最大尺寸。

按钮的最大尺寸与其首选尺寸相同。

当您创建按钮时,您可以执行以下操作:

JButton button = new JButton(...);
Dimension maximum = button.getMaximumSize();
maximum.width = Integer.MAX_VALUE;
button.setMaximumSize( maximum );

注意:

如果您从不更改按钮的字体大小,这只是一个快速修复。对于正确的解决方案,您应该真正创建一个自定义按钮来扩展 JButton 并覆盖 getMaximumSize() 方法以返回上述大小。然后,如果按钮的属性动态更改,这将起作用。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。