我浏览过,并没有找到专门针对我的情况定制的解决方案。我有一个面板,我在对话框中显示:
//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& type6,大小相同,所以它们看起来很好。但是,标题和前4个面板的大小不同,我希望它们全部左对齐。到目前为止,我还没有找到解决这个问题的好方法。
问题是,我怎么能保持对齐前5个面板,而不是最后2个?如果不是,我怎么能将它们全部对齐? setalignmentx()不适用于面板。我已经尝试过使用GridLayout,但是gui主窗口的宽度相当大,并不适合屏幕,因此BoxLayout沿Y轴。感谢任何帮助或建议。
答案 0 :(得分:26)
这是一个示例,它将保留所有添加到用作容器的面板的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);
答案 1 :(得分:13)
创建一个水平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 ) );
等....你可以通过每一行,添加组件,胶水和支柱来获得更好的体验。我有很好的运气深深地嵌套垂直和水平框,并且当我想在一个盒子中不止一次地做相同的布局时编写辅助方法。根据需要,您可以做什么,混合组件,支柱和胶水是没有限制的。
我确信有更好的方法可以做到这一切,但我还没有找到它。并且动态调整大小允许用户使用一小段文本使用一个小窗口,一个有大量文本的用户调整大小以使其完全适合。
答案 2 :(得分:5)
您应该在面板上使用setAlignmentX
,因为它可用于JPanel
。方法setAlignmentX
和setAlignmentY
位于JComponent
,JPanel
扩展。它有效......我有一些代码使用这些方法来对齐BoxLayout
中的JPanel。
好的,好的,在我回答时编辑你的问题:)
尝试使用Box
而不是使用JPanel。我发现Box
类作为容器非常有用。来自API:
使用BoxLayout对象作为其布局的轻量级容器 经理。 Box提供了几种有用的类方法 使用BoxLayout的容器 - 甚至是非Box容器。
如果您还没有看过,教程How to Use BoxLayout非常有帮助。