在我的应用程序中使用 JMenuBar 时,文件、编辑等元素靠得太近,如果元素之间有一些空间会更好看。这可能吗?
7 回答
是的,只需在其中添加带有空文本的 MenuBar 项目并使其不可点击/可选择
需要添加JComponents
的不是focusable
,你可以创建一个空间
JMenuBar
JLabel
(必须设置为 requiredPreferredSize
)JSeparator
(最小尺寸为 10 像素,必须setOpaque
为JSeparator
)
JMenuItem
JSeparator
(无需额外设置)JLabel
(必须设置为 requiredPreferredSize
)
对于水平使用,您可以使用|
.
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"));
它很旧,但我一直在寻找解决同一问题的任何方法我得出了这个结论:
您应该为您的 JMenuItem 设置边距,如下所示:
JMenuItem menu = new JMenuItem("My Menu");
menu.setMargin(new Insets(10, 10, 10, 10));
javax.swing.Box 上有一个名为 createHorizontalStrut( 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" ) );
其他答案效果很好,但由于填充和边距可能会有意想不到的间距。如果您想更好地控制垫片的大小:
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 在 JMenuItem 上面建议的方式。这应该也适用于 JMenu 对象,但我尝试过它并没有用。
执行此操作的第二种标准方法是将 EmptyBorder 添加到 JMenu 对象。这工作得很好。它使您可以完全控制您想要在各个方向上拥有的确切距离。
JMenu jMenuFile = new JMenu("File")
jMenuFile.setBorder(new EmptyBorder(0, 10, 0, 10));