菜单中的Java Swing JSepator位置不正确
当我想为JavaSwing应用程序插入带有JSepator的分隔符时,我遇到了一个问题。事实上,当我在Mac上运行我的程序时,我遇到了这个问题,我在windows或linux上没有。分隔符放置不正确,文本被删除。有人知道为什么吗 我的代码:菜单中的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
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)'