Java 在JMenuBar中添加元素之间的间距

Java 在JMenuBar中添加元素之间的间距,java,swing,jmenubar,Java,Swing,Jmenubar,在我的应用程序中使用JMenuBar时,File、Edit等元素靠得太近,如果元素之间有一些空间,看起来会更好。这可能吗 是的,只需添加带有空文本的菜单栏项,并使其不可单击/选择对于水平使用,您可以使用 menu.add(new JMenu("File")); menu.add(new JMenu("|")); menu.add(new JMenu("Edit")); 对于垂直使用,您可以简单地使用jsepator或addSeparator(): 需要添加不可聚焦的组件时,您可以为 JMenu

在我的应用程序中使用JMenuBar时,File、Edit等元素靠得太近,如果元素之间有一些空间,看起来会更好。这可能吗

是的,只需添加带有空文本的菜单栏项,并使其不可单击/选择

对于水平使用,您可以使用

menu.add(new JMenu("File"));
menu.add(new JMenu("|"));
menu.add(new JMenu("Edit"));
对于垂直使用,您可以简单地使用
jsepator
addSeparator()


需要添加不可聚焦的
组件
时,您可以为

  • JMenuBar

    • JLabel
      (必须设置为所需的
      PreferredSize

    • jsepator
      (最小尺寸为10像素,对于
      jsepator
      ,必须
      setOpaque

  • JMenuItem

    • jsepator
      (无需其他设置)

    • JLabel
      (必须设置为所需的
      PreferredSize


  • 它很旧,但我一直在寻找解决同样问题的方法 我得出结论:

    您应该为您的项目设置边距,如下所示:

    JMenuItem menu = new JMenuItem("My Menu");
    menu.setMargin(new Insets(10, 10, 10, 10));
    
    JMenuBar menuBar = new JMenuBar();
    menuBar.add( new JMenu( "File" ) );
    menuBar.add( Box.createHorizontalStrut( 10 ) );  //this will add a 10 pixel space
    menuBar.add( new JMenu( "Edit" ) );
    

    javax.swing.Box上有一个名为createHorizontalstrop(int-width)的静态方法来创建一个不可见的固定宽度组件

    代码如下所示:

    JMenuItem menu = new JMenuItem("My Menu");
    menu.setMargin(new Insets(10, 10, 10, 10));
    
    JMenuBar menuBar = new JMenuBar();
    menuBar.add( new JMenu( "File" ) );
    menuBar.add( Box.createHorizontalStrut( 10 ) );  //this will add a 10 pixel space
    menuBar.add( new JMenu( "Edit" ) );
    

    其他答案效果很好,但由于填充和边距,可能会出现意外的间距。如果您想更好地控制垫片的尺寸:

    JMenu spacer = new JMenu();
    
    //disable the spacer so that it doesn't behave
    //like a menu item
    spacer.setEnabled(false);
    
    //Java components are weird. Set all three to
    //guarantee that size is used
    spacer.setMinimumSize(new Dimension(width, 1));
    spacer.setPreferredSize(new Dimension(width, 1));
    spacer.setMaximumSize(new Dimension(width, 1));
    
    //add the spacer to your JMenuBar
    jMenuBar.add(spacer);
    

    有两种标准方法可以向Swing组件添加任意间距

    一种标准方法是对JMenuBar对象中包含的JMenu对象使用setMargin。这是加布里埃尔·卡马拉(Gabriel Cámara)在上述für jmenu项目中建议的方式。这应该也适用于für JMenu对象,但我试过了,但没有成功

    第二种标准方法是向JMenu对象添加EmptyBorder。这完全行得通。它为您提供了在各个方向上想要的精确距离的完全控制

    JMenu jMenuFile = new JMenu("File")
    jMenuFile.setBorder(new EmptyBorder(0, 10, 0, 10));
    

    如果您使用的是netbeans,请右键单击组件并单击组件周围的空格。如果您需要空格,请尝试menubar.add(new JPanel());它对我很有效。谢谢,这非常有效。PS..setClickable()和.setSelectable()不存在,请使用.setEnabled()为遇到相同问题的人提供迄今为止最好的解决方案。