菜单中的Java Swing JSepator位置不正确

菜单中的Java Swing JSepator位置不正确,java,swing,jmenu,jmenuitem,jseparator,Java,Swing,Jmenu,Jmenuitem,Jseparator,当我想为JavaSwing应用程序插入带有JSepator的分隔符时,我遇到了一个问题。事实上,当我在Mac上运行我的程序时,我遇到了这个问题,我在windows或linux上没有。分隔符放置不正确,文本被删除。有人知道为什么吗 我的代码: JMenuItem fileItem = new JMenuItem("Close"); KeyStroke ... fileItem.add(new JSeparator(JSeparator.HORIZONTAL),BorderLayout.LINE_S

当我想为JavaSwing应用程序插入带有JSepator的分隔符时,我遇到了一个问题。事实上,当我在Mac上运行我的程序时,我遇到了这个问题,我在windows或linux上没有。分隔符放置不正确,文本被删除。有人知道为什么吗

我的代码:

JMenuItem fileItem = new JMenuItem("Close");
KeyStroke ...
fileItem.add(new JSeparator(JSeparator.HORIZONTAL),BorderLayout.LINE_START);
截图:

基本上,您现在的代码显示您假设
JMenuItem
有一个默认的
BorderLayout
,这可能是真的(但我不这么认为)

尽管根本问题是您正在将
jsepator
添加到
JMenuItem
中,但实际上您应该通过
JMenu#addSeparator()
将它添加到
JMenuItem
中,其中包含各种
JMenuItem
项。更多信息,请参阅

你应该这样做:

JMenu menu=new JMenu();

JMenuItem item1=new JMenuItem("something 1");
JMenuItem item2=new JMenuItem("something 1");

menu.add(item1);
menu.addSeparator();//lets add that separator
menu.add(item2);
给你一些东西,比如:

JMenu menu=new JMenu();

JMenuItem item1=new JMenuItem("something 1");
JMenuItem item2=new JMenuItem("something 1");

menu.add(item1);
menu.addSeparator();//lets add that separator
menu.add(item2);

更新:

以下是一个例子:

import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.SwingUtilities;

public class Test {

    public Test() {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        JMenuBar menuBar=new JMenuBar();

        JMenu menu = new JMenu("File");
        JMenu menu2 = new JMenu("Else");

        JMenuItem item1 = new JMenuItem("something 1");
        JMenuItem item2 = new JMenuItem("something 2");
        JMenuItem item3 = new JMenuItem("else 1");
        JMenuItem item4 = new JMenuItem("else 2");

        menu2.add(item3);
        menu2.addSeparator();//lets add that separator
        menu2.add(item4);

        menu.add(menu2);
        menu.add(item1);
        menu.addSeparator();//lets add that separator
        menu.add(item2);

        menuBar.add(menu);

        frame.setJMenuBar(menuBar);
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String args[]) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new Test();
            }
        });
    }
}


@Dan在考虑JMenuItem的布局时,我们需要添加更多的项目,比如
jsepator
或其他什么,我突然想到我们在
jMenus
上这样做:如果我这样做,分隔符会放在菜单的开头。我把它放在我想要的地方,在“另存为”和“关闭”之间。@Tof hold up我会快速做一个例子,看看是什么up@David不,太完美了!很抱歉,我没有在filemenu.add(saveAs)和filemenu.add(fileItemClose)之间放置正确的位置。现在好了!:)'filemenu.add(另存为)filemenu.addSeparator()filemenu.add(fileItemClose)'