事实上,当我在Mac上运行我的程序时,我遇到了这个问题,而在windows或linux上却没有这个问题。有人知道为什么吗?
我的代码:
JMenuItem fileItem = new JMenuItem("Close");
KeyStroke ...
fileItem.add(new JSeparator(JSeparator.HORIZONTAL),BorderLayout.LINE_START);截图:

发布于 2013-01-30 03:38:56
基本上,您现在的代码显示您假设JMenuItem有一个默认的BorderLayout,这可能是真的(但我不这么认为)。
虽然根本问题是您正在将JSeparator添加到JMenuItem,但实际上您应该通过JMenu#addSeparator()将其添加到包含各种JMenuItem的JMenu#addSeparator()中。有关详细信息,请参阅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);给你一些类似的东西:

更新:
下面是一个示例:

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();
}
});
}
}https://stackoverflow.com/questions/14590383
复制相似问题