java BoxLayout面板';s对齐

java BoxLayout面板';s对齐,java,swing,user-interface,layout-manager,boxlayout,Java,Swing,User Interface,Layout Manager,Boxlayout,我浏览了一下,还没有找到一个专门针对我的情况的解决方案。我有一个显示在对话框中的面板: //create dialog panel JPanel panel = new JPanel(); panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS)); panel.add(headerPanel); panel.add(type1Panel); panel.add(type2Panel); panel.add(type3Panel); panel

我浏览了一下,还没有找到一个专门针对我的情况的解决方案。我有一个显示在对话框中的面板:

//create dialog panel
JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
panel.add(headerPanel);
panel.add(type1Panel);
panel.add(type2Panel);
panel.add(type3Panel);
panel.add(type4Panel);
panel.add(type5Panel);
panel.add(type6Panel);

int result = JOptionPane.showConfirmDialog(null, panel, "Please enter values.", JOptionPane.OK_CANCEL_OPTION);
最后两个面板(type5和type6)的大小相同,因此看起来很好。但是,标题和前4个面板的大小不同,我希望它们都是左对齐的。到目前为止,我还没有找到一个解决这个问题的好办法


问题是,如何左对齐前5个面板,而不是最后2个?如果没有,我如何将它们全部左对齐?setalignmentx()不适用于面板。我尝试过使用GridLayout,但是gui主窗口的宽度太大,不能很好地适应屏幕,因此Y轴的框式布局。感谢您的帮助或建议

您应该在面板上使用
setAlignmentX
,因为它可用于
JPanel
。方法
setAlignmentX
setAlignmentY
可在
JComponent
中找到,它是
JPanel
的扩展。它可以工作……我有一些代码使用这些方法在
BoxLayout
中对齐JPanel

好的,在我回答时编辑你的问题:)

不要使用JPanel,而是尝试使用。我发现
Box
类作为容器非常有用。从API:

使用BoxLayout对象作为其布局的轻型容器 经理Box提供了几个对 使用BoxLayout的容器——甚至是非盒子容器


如果您还没有看过,本教程将非常有用。

下面是一个示例,它将左对齐添加到用作容器的面板中的所有JPanel

   JPanel a = new JPanel();
   JPanel b = new JPanel();
   JPanel c = new JPanel();

   a.setBackground( Color.RED );
   b.setBackground( Color.GREEN  );
   c.setBackground( Color.BLUE );

   a.setMaximumSize( new Dimension(  10, 10) );
   b.setMaximumSize( new Dimension(  50, 10) );

   a.setAlignmentX( Component.LEFT_ALIGNMENT );//0.0
   b.setAlignmentX( Component.LEFT_ALIGNMENT );//0.0
   c.setAlignmentX( Component.LEFT_ALIGNMENT );//0.0

   JPanel panel = new JPanel();
   panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
   panel.add(a);
   panel.add(b);
   panel.add(c); 

   int result = JOptionPane.showConfirmDialog(null, panel, "Please enter values.", JOptionPane.OK_CANCEL_OPTION);

创建一个水平javax.swing.Box对象以包含每个typenPanel对象。使用水平支柱和胶水,您可以随心所欲:

Box  b1 = Box.createHorizontalBox();
b1.add( type1Panel );
b1.add( Box.createHorizontalGlue() );
panel.add( b1 );
为简单起见,请编写一个帮助器方法来完成此操作:

private Component leftJustify( JPanel panel )  {
    Box  b = Box.createHorizontalBox();
    b.add( panel );
    b.add( Box.createHorizontalGlue() );
    // (Note that you could throw a lot more components
    // and struts and glue in here.)
    return b;
}
然后:

等等。。。。您可以通过添加组件、胶水和支柱,使每一条线都更加美观。我很幸运地对垂直和水平框进行了深度嵌套,并且当我想在一个框中多次进行相同的布局时,我还编写了助手方法。您可以做的事情没有限制,可以根据需要混合组件、支柱和胶水


我肯定有更好的方法来做这一切,但我还没有找到。动态调整大小可以让有少量文本的用户使用一个小窗口,而有大量文本的用户可以调整窗口大小,使其适合所有人。

现在就开始使用它:headerPanel.setAlignmentX(Component.LEFT_ALIGNMENT);但似乎是故意的。我看到有人提到要避免这样做。
setalignmentx()不适用于面板。
-
setalignmentx()
适用于我。你能澄清一下吗?我解决了问题。如果您不选择panel.add(headerPanel);然后执行headerPanel.setAlignmentX(组件左对齐);它无法正确对齐。但是,先进行对齐,然后将headerPanel添加到对话框的面板中,效果很好。如图所示,我使用的是headerPanel.setAlighmentX(Component.LEFT_ALIGNMENT);。setAlignmentX正在查找类型浮点?方法
setAlignmentX
setAlignmentY
采用
float
,只是为了清楚起见
JComponent
具有以下继承自
java.awt.Component
的对齐常量:
底部对齐
中心对齐
左侧对齐
右侧对齐
顶部对齐
。至少对我来说,使用这些可以使代码更具可读性。@mre为什么?对于这个例子,它只会增加复杂性。代码简单易读。对于这样的例子,简单性优于正则性。因为拥有和使用命名和系统常数总是比提供幻数更好?谢谢
setAlignmentX
对所有
JComponent
实例都很有用。
panel.add( leftJustify( headerPanel ) );
panel.add( leftJustify( type1Panel ) );
panel.add( leftJustify( type2Panel ) );