2

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

我的代码:

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

截屏 : 在此处输入图像描述

4

1 回答 1

6

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

尽管根本问题是您将s 添加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);

给你类似的东西:

在此处输入图像描述

更新:

这是一个例子:

在此处输入图像描述

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();
            }
        });
    }
}
于 2013-01-29T19:38:56.153 回答