Java JMenuBar中的组件想在jsepator之后对齐吗?

Java JMenuBar中的组件想在jsepator之后对齐吗?,java,swing,jmenu,jmenubar,jseparator,Java,Swing,Jmenu,Jmenubar,Jseparator,请看这张图片: 如您所见,我的“自动刷新”JCheckBox和“显示列”菜单之间有一个JSepator,我的“显示列”菜单希望尽可能右。为什么它不像JSepator之前的所有东西一样,不向左对齐?我似乎无法做到这一点,以下是我当前的代码: JCheckBox pulling = new JCheckBox("Auto Refreshing"); ... menuBar.add(pulling); menuBar.add(new javax.swing.JSeparator(javax.swi

请看这张图片:

如您所见,我的“自动刷新”JCheckBox和“显示列”菜单之间有一个JSepator,我的“显示列”菜单希望尽可能右。为什么它不像JSepator之前的所有东西一样,不向左对齐?我似乎无法做到这一点,以下是我当前的代码:

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);
这可能会有帮助。引述:

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

所以你可以看到布局逻辑不同,换句话说,不要指望它。然而,我不知道为什么您的手动左对齐不起作用。最有可能的问题是上一份菜单的大小。您可以做的是使用,因为
JMenuBar
有一个
BoxLayout

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

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

问题在于JSepator的大小,它希望占据尽可能多的水平空间。因此,我的解决方案是限制其大小,使其最大只能有一个像素宽:

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

JMenuBar仅设计用于JMenu儿童;添加JMenu以外的内容会带来麻烦。请发布演示问题的帖子。您以前曾被要求参加SSCCE。在问题解决之前,您不知道代码的哪一部分是问题所在。我们没有时间不断询问更多信息,所以所有相关信息都应该与问题一起发布,这样我们就不必猜测任何事情。@camickr。对不起,我确实提供了一个SSCCE。你还想看什么?其他的都与这个问题无关。在通过setJMenuBar(…)@hanglingpointer将此菜单栏设置为JFrame的JMenuBar之后,这不是SSCE。代码无法编译和执行。阅读链接。添加水平胶水将菜单稍微移动,使其几乎居中。不过,您的建议确实帮助我找到了解决方案,所以谢谢!如果发布了正确的SSCCE,您可能会在2天前得到答案。