菜单中的Java Swing JSeparator放置错误

时间:2013-01-29 19:07:33

标签: java swing jmenu jmenuitem jseparator

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

我的代码:

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

截图: enter image description here

1 个答案:

答案 0 :(得分:6)

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

虽然根本问题是您要将JSeparator添加到JMenuItem,但事实上您应该将其添加到JMenu,其中包含各种JMenuItem来自JMenu#addSeparator() {1}}。有关详情,请参阅How to Use Separators

你应该做的事情如下:

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);

给你一些类似的东西:

enter image description here

<强>更新

以下是一个例子:

enter image description here

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();
            }
        });
    }
}