框布局中的宽度

hud*_*udi 4 java swing layout-manager boxlayout

这是我的代码片段:

pane.setLayout(new BoxLayout(pane, BoxLayout.Y_AXIS));

JPanel a = new JPanel();
a.setAlignmentX(Component.CENTER_ALIGNMENT);
a.setPreferredSize(new Dimension(100, 100));
a.setBorder(BorderFactory.createTitledBorder("aa"));
JPanel b = new JPanel();
b.setAlignmentX(Component.CENTER_ALIGNMENT);
b.setPreferredSize(new Dimension(50, 50));
b.setBorder(BorderFactory.createTitledBorder("bb"));
pane.add(a);
pane.add(b);
Run Code Online (Sandbox Code Playgroud)

问题在于第二个面板的宽度,如图所示:

在此输入图像描述 我该如何解决?

因为在流程布局中它看起来像我想要的: 在此输入图像描述

use*_*572 8

如前所述,BoxLayout会关注组件所要求的最小,首选和最大大小.在对布局进行微调时,可能需要调整这些尺寸.¹

import java.awt.Component;
import java.awt.Dimension;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class BoxLayoutDemo {
    private static void createAndShowGUI(){
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.Y_AXIS));

        JPanel a = new JPanel();
        a.setAlignmentX(Component.CENTER_ALIGNMENT);
        a.setPreferredSize(new Dimension(100, 100));
        a.setMaximumSize(new Dimension(100, 100)); // set max = pref
        a.setBorder(BorderFactory.createTitledBorder("aa"));
        JPanel b = new JPanel();
        b.setAlignmentX(Component.CENTER_ALIGNMENT);
        b.setPreferredSize(new Dimension(50, 50));
        b.setMaximumSize(new Dimension(50, 50)); // set max = pref
        b.setBorder(BorderFactory.createTitledBorder("bb"));

        frame.getContentPane().add(a);
        frame.getContentPane().add(b);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable(){
            @Override
            public void run() {
                createAndShowGUI();             
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

¹ 如何使用BoxLayout:指定组件大小.