JMenuBar中的组件想要在JSeparator之后远远对齐?

时间:2015-08-10 19:39:54

标签: java swing jmenu jmenubar jseparator

看一下这张图片:

enter image description here

正如您所看到的,我在“自动刷新”JCheckBox和我的“显示列”菜单之间有一个JSeparator,我的“显示列”菜单希望尽可能地正确。为什么它不能像JSeparator之前的其他所有东西一样左右对齐?我似乎无法做到这一点,这是我目前的代码:

JCheckBox pulling = new JCheckBox("Auto Refreshing");
...
menuBar.add(pulling);

menuBar.add(new javax.swing.JSeparator(javax.swing.SwingConstants.VERTICAL));

JMenu showMenu = new JMenu("Show Column");
showMenu.setAlignmentX(Component.LEFT_ALIGNMENT);
menuBar.add(showMenu);

2 个答案:

答案 0 :(得分:2)

tutorial可能会有所帮助。引用:

  

默认情况下,大多数组件都具有中心X和Y对齐。但是,按钮,组合框,标签和菜单项具有不同的默认X对齐值:LEFT_ALIGNMENT。

因此,您可以看到放置逻辑不同,换句话说,不要依赖它。但是,我不知道为什么你手动对齐左边不起作用。最有可能的问题是你上一个菜单的大小。您可以使用glue as filler,因为JMenuBar有一个BoxLayout

menuBar.add(showMenu);
menuBar.add(Box.createHorizontalGlue());

这个不可见的空间将添加到菜单的末尾,它会将组件推到左边。

答案 1 :(得分:0)

问题是JSeparator的大小,它想占用尽可能多的水平空间。所以,我的解决方案是限制它的大小,使它最多只能是一个像素宽:

JSeparator menuSep = new JSeparator(javax.swing.SwingConstants.VERTICAL);
menuSep.setMaximumSize(new java.awt.Dimension(1, 1000));
menuBar.add(menuSep);