【问题标题】:Adding spacing between elements in JMenuBar在 JMenuBar 中的元素之间添加间距
【发布时间】:2012-08-31 09:10:25
【问题描述】:

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

【问题讨论】:

  • 如果您使用的是 netbeans,请尝试右键单击组件并单击组件周围的空格
  • 如果您需要空间,请尝试 menubar.add(new JPanel());它对我有用。

标签: java swing jmenubar


【解决方案1】:

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

【讨论】:

  • 谢谢,这工作非常好 PS。 .setClickable() 和 .setSelectable() 不存在,而是为遇到相同问题的人使用 .setEnabled()
【解决方案2】:

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

  1. JMenuBar

    • JLabel(必须设置为必填PreferredSize

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

  2. JMenuItem

    • JSeparator(无需额外设置)

    • JLabel(必须设置为必填PreferredSize

【讨论】:

    【解决方案3】:

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

    你应该为你的 JMenuItem 设置边距,像这样:

    JMenuItem menu = new JMenuItem("My Menu");
    menu.setMargin(new Insets(10, 10, 10, 10));
    

    【讨论】:

    • 迄今为止最好的解决方案。
    【解决方案4】:

    对于横向使用,您可以使用|

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

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

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

    【讨论】:

      【解决方案5】:

      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" ) );
      

      【讨论】:

        【解决方案6】:

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

        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);
        

        【讨论】:

          【解决方案7】:

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

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

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

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

          【讨论】:

            猜你喜欢
            • 2018-10-03
            • 2011-03-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-01-16
            相关资源
            最近更新 更多