我只能为我的代码设置水平分隔符,如何设置垂直分隔符?与此类似 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);
答案 0 :(得分:3)
JMenuItem中的垂直分隔符?我想到的唯一可以作为JSeparator处理的东西如下:
但是这个“JSeparator”不是一个额外添加的JSeparator,而是依赖于LookAndFeel。
下面您将看到具有相同JMenuBar但具有不同外观和感觉的相同JFrame:
两个屏幕的代码完全相同,但执行的外观和感觉不同:
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的这种效果,你必须稍微卷起袖子。
JMenu
是AbstractButton
,默认情况下没有布局。当您向JMenu添加内容时,您实际上已将其添加到菜单的内部JPopupMenu
,其中包含DefaultMenuLayout
(BoxLayout
的子类)&# 39;默认情况下的布局。
要尝试的事情:编写自己的MenuItemUI
以在JMenu上安装,或者将JMenu子类化为使用具有不同LayoutManager的JPopupMenu。我还没试过,所以我不确定哪个是正确的。
就我个人而言,我只是把它留给L& F,就像@guitar_freak建议的那样。这似乎很有效,但最终只有你可以决定。
答案 2 :(得分:-1)
我认为这是你正在寻找的东西:
file.add(new JSeparator(SwingConstants.VERTICAL));