Java JSepator不在我的JPanel中的正确位置

Java JSepator不在我的JPanel中的正确位置,java,swing,jpanel,Java,Swing,Jpanel,因此,我的代码如下: JPanel mainPanel = new JPanel(); mainPanel.setBorder(new EmptyBorder(50,50,0,10)); BoxLayout layout = new BoxLayout(mainPanel, BoxLayout.Y_AXIS); mainPanel.setLayout(layout); JSeparator separate = new JSeparator(SwingConstants.HORIZONTA

因此,我的代码如下:

JPanel mainPanel = new JPanel();

mainPanel.setBorder(new EmptyBorder(50,50,0,10));

BoxLayout layout = new BoxLayout(mainPanel, BoxLayout.Y_AXIS);
mainPanel.setLayout(layout);

JSeparator separate = new JSeparator(SwingConstants.HORIZONTAL);
mainPanel.add(separate);

mainPanel.add(new JButton());
mainPanel.add(new JButton());
我一直面临的问题是,我的面板看起来不像:

______________
|             |
|  ------     |
|  Button     |
|  Button     |
|             |
|             |
|             |
______________
出于某种原因,它在按钮和分隔符之间留出了大量空间,因此看起来像:

______________
|             |
|  ------     |
|             |
|             |
|             |
|  Button     |
|  Button     |
______________

就我的一生而言,我无法将按钮放在JSepator旁边,有什么想法吗?

如果Y对齐(来自.getAlignmentY())不一样,BoxLayout往往会做一些古怪的事情。尝试手动将路线设置为顶部。(BoxLayout中的X对齐方式也会发生同样的情况。)

如果Y对齐方式(来自.getAlignmentY())不一样,BoxLayout往往会做一些古怪的事情。尝试手动将路线设置为顶部。(BoxLayout中的X对齐也会发生同样的情况。)

BoxLayout考虑组件的最大尺寸。当有更多可用空间时,组件将增长以占用额外的空间。您需要防止分隔符增长:

JSeparator separate = new JSeparator(SwingConstants.HORIZONTAL);
System.out.println(separate.getPreferredSize());
System.out.println(separate.getMaximumSize());
Dimension d = separate.getPreferredSize();
d.width = separate.getMaximumSize().width;
separate.setMaximumSize( d );

BoxLayout尊重组件的最大尺寸。当有更多可用空间时,组件将增长以占用额外的空间。您需要防止分隔符增长:

JSeparator separate = new JSeparator(SwingConstants.HORIZONTAL);
System.out.println(separate.getPreferredSize());
System.out.println(separate.getMaximumSize());
Dimension d = separate.getPreferredSize();
d.width = separate.getMaximumSize().width;
separate.setMaximumSize( d );
显示路线与布局方向正交。我不认为这会有帮助。显示路线与布局方向正交。我不认为这会有帮助。