如何为JMenuItem设置垂直分隔符

时间:2014-03-19 14:03:11

标签: java swing jmenuitem

我只能为我的代码设置水平分隔符,如何设置垂直分隔符?与此类似 http://jade-cheng.com/hpu/2012-spring/csci-2912/assignment-5/blueprint-2.png

    file.add(newMenuItem);
    file.add(openMenuItem);
    file.add(saveMenuItem);
    file.add(subMenu);
    file.addSeparator();
    file.add(exitMenuItem);

3 个答案:

答案 0 :(得分:3)

JMenuItem中的垂直分隔符?我想到的唯一可以作为JSeparator处理的东西如下:

enter image description here

但是这个“JSeparator”不是一个额外添加的JSeparator,而是依赖于LookAndFeel。

下面您将看到具有相同JMenuBar但具有不同外观和感觉的相同JFrame:

enter image description here

两个屏幕的代码完全相同,但执行的外观和感觉不同:

public class NewClass extends JFrame {

    public NewClass() throws HeadlessException {
        JMenuBar menuBar = new JMenuBar();
        JMenu menu = new JMenu("File");
        menuBar.add(menu);
        menu.add(new JMenuItem("Open..."));
        menu.add(new JMenuItem("Save"));
        menu.add(new JMenuItem("Save as..."));
        menu.addSeparator();
        menu.add(new JMenuItem("Delete"));

        setJMenuBar(menuBar);
        setSize(new Dimension(500,500));
        setVisible(true);
    }

    public static void main(String[] args) {
        try {
           //UIManager.setLookAndFeel("javax.swing.plaf.metal.MetalLookAndFeel");
           //UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
           UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());      
           new NewClass();
        } catch (ClassNotFoundException ex) {
          Logger.getLogger(NewClass.class.getName()).log(Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
          Logger.getLogger(NewClass.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
          Logger.getLogger(NewClass.class.getName()).log(Level.SEVERE, null, ex);
        } catch (UnsupportedLookAndFeelException ex) {
          Logger.getLogger(NewClass.class.getName()).log(Level.SEVERE, null, ex);
        }
    }   
}

注意,

menu.add(new JSeparator(JSeparator.VERTICAL));

根本不会生成任何分隔符(您可以尝试)

答案 1 :(得分:0)

正如@guitar_freak已经指出的那样,一些LayoutManagers会免费为您提供此效果,而其他人则不会。如果你想要任何LM的这种效果,你必须稍微卷起袖子。

JMenuAbstractButton,默认情况下没有布局。当您向JMenu添加内容时,您实际上已将其添加到菜单的内部JPopupMenu,其中包含DefaultMenuLayoutBoxLayout的子类)&# 39;默认情况下的布局。

要尝试的事情:编写自己的MenuItemUI以在JMenu上安装,或者将JMenu子类化为使用具有不同LayoutManager的JPopupMenu。我还没试过,所以我不确定哪个是正确的。

就我个人而言,我只是把它留给L& F,就像@guitar_freak建议的那样。这似乎很有效,但最终只有你可以决定。

答案 2 :(得分:-1)

我认为这是你正在寻找的东西:

file.add(new JSeparator(SwingConstants.VERTICAL));