菜单中的Java Swing JSeparator放置错误

Tof*_*Tof 2 java swing jmenuitem jmenu jseparator

当我想插入一个带有JSeparator for Java Swing应用程序的分隔符时,我遇到了问题.事实上,当我在Mac上运行我的程序时,我遇到了这个问题,我在Windows或Linux上没有它.分隔符放置不正确,文本是删除线.有谁知道为什么?

我的代码:

JMenuItem fileItem = new JMenuItem("Close");
KeyStroke ...
fileItem.add(new JSeparator(JSeparator.HORIZONTAL),BorderLayout.LINE_START);
Run Code Online (Sandbox Code Playgroud)

截图: 在此输入图像描述

Dav*_*amp 6

基本上你的代码现在表明你假设JMenuItem有一个默认值BorderLayout,这可能是真的(但我不这么认为).

虽然根本问题是你正在添加JSeparatorJMenuItem实际上你应该将它添加到JMenu包含各种JMenuItems via的内容JMenu#addSeparator().有关更多信息,请参见如何使用分隔符.

你应该做的事情如下:

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);
Run Code Online (Sandbox Code Playgroud)

给你这样的东西:

在此输入图像描述

更新:

这是一个例子:

在此输入图像描述

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();
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)