8

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

4

7 回答 7

8

是的,只需在其中添加带有空文本的 MenuBar 项目并使其不可点击/可选择

于 2012-08-31T09:12:21.923 回答
8

需要添加JComponents的不是focusable,你可以创建一个空间

  1. JMenuBar

    • JLabel(必须设置为 required PreferredSize

    • JSeparator(最小尺寸为 10 像素,必须setOpaqueJSeparator

  2. JMenuItem

    • JSeparator(无需额外设置)

    • JLabel(必须设置为 required PreferredSize

于 2012-08-31T09:28:14.843 回答
5

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

menu.add(new JMenu("File"));
menu.add(new JMenu("|"));
menu.add(new JMenu("Edit"));

对于垂直使用,您可以简单地使用 a JSeparator or addSeparator()

menu.add(new JMenuItem("Close"));
menu.add(new JSeparator());        // explicit
menu.addSeparator();               // or implicit
menu.add(new JMenuItem("Exit"));

分隔器

于 2012-08-31T09:13:57.713 回答
5

它很旧,但我一直在寻找解决同一问题的任何方法我得出了这个结论:

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

JMenuItem menu = new JMenuItem("My Menu");
menu.setMargin(new Insets(10, 10, 10, 10));
于 2013-02-25T16:32:04.700 回答
1

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

代码看起来像这样:

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" ) );
于 2014-07-01T19:41:36.910 回答
0

其他答案效果很好,但由于填充和边距可能会有意想不到的间距。如果您想更好地控制垫片的大小:

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);
于 2015-12-19T05:18:50.057 回答
0

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

一种标准方法是对 JMenuBar 对象中包含的 JMenu 对象使用 setMargin。这是 Gabriel Câmara 在 JMenuItem 上面建议的方式。这应该也适用于 JMenu 对象,但我尝试过它并没有用。

执行此操作的第二种标准方法是将 EmptyBorder 添加到 JMenu 对象。这工作得很好。它使您可以完全控制您想要在各个方向上拥有的确切距离。

JMenu jMenuFile = new JMenu("File")
jMenuFile.setBorder(new EmptyBorder(0, 10, 0, 10));
于 2019-06-13T09:31:26.247 回答