java 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.add(type4Panel); panel.add(type5Panel); panel.add(type6Panel); int result = JOptionPane.showConfirmDialog(null, panel, "Please enter values.", JOptionPane.OK_CANCEL_OPTION); 

最后两个面板的大小,类型5和类型6,大小相同,所以它们看起来很好。 但是,标题和前4个面板的大小不同,我希望它们全部左对齐。 到目前为止,我还没有找到一个很好的解决方案,如何解决这个问题。

问题是,我怎么能保持对齐前5个面板,而不是最后2个? 如果不是,我怎么能将它们全部对齐? setalignmentx()不适用于面板。 我已经尝试过使用GridLayout,但是gui主窗口的宽度相当大,并且不适合屏幕,因此BoxLayout沿Y轴。感谢任何帮助或建议。

下面是一个示例,它将对齐添加到用作容器的面板的所有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; } 

然后:

 panel.add( leftJustify( headerPanel ) ); panel.add( leftJustify( type1Panel ) ); panel.add( leftJustify( type2Panel ) ); 

等等….你可以通过每一行,添加组件,胶水和支柱来获得更好的体验。 我有很好的运气深深地嵌套垂直和水平框,并且当我想在一个盒子中不止一次地做相同的布局时编写辅助方法。 根据需要,您可以做什么,混合组件,支柱和胶水是没有限制的。

我确信有更好的方法可以做到这一切,但我还没有找到它。 并且动态resize允许具有短文本的用户使用小窗口,并且具有大量文本的用户resize以使其适合。

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

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

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

一个轻量级容器,它使用BoxLayout对象作为其布局管理器。 Box提供了几种类方法,这些方法对于使用BoxLayout的容器非常有用 – 甚至是非Box容器。

如果你还没有看到它,教程如何使用BoxLayout非常有帮助。