【问题标题】:Java JMenuBar : Vertical JSeparatorJava JMenuBar : 垂直 JSeparator
【发布时间】:2012-05-18 14:33:54
【问题描述】:

我正在尝试在我的菜单中添加一个垂直的 JSeparator。但它在我的 MenuItems 之间设置了边距。 我希望我的物品保持在左侧,而不是左侧 - 中心 - 右侧。

外观: 我想要的是:

   JMenu settings = new JMenu("Settings");
    image = ImageIO.read(new File(Constants.IMAGES_DIR + File.separator + "settings.png"));
    settings.setHorizontalTextPosition(SwingConstants.CENTER);
    settings.setVerticalTextPosition(SwingConstants.BOTTOM);
    settings.setIcon(new ImageIcon(image));
    add(settings);

    JMenu build = new JMenu("Builder");
    image = ImageIO.read(new File(Constants.IMAGES_DIR + File.separator + "build.png"));
    build.setHorizontalTextPosition(SwingConstants.CENTER);
    build.setVerticalTextPosition(SwingConstants.BOTTOM);
    build.setIcon(new ImageIcon(image));
    add(build);

    add(new JSeparator(JSeparator.VERTICAL));

    JMenu help = new JMenu("Help");
    image = ImageIO.read(new File(Constants.IMAGES_DIR + File.separator + "help.png"));
    help.setHorizontalTextPosition(SwingConstants.CENTER);
    help.setVerticalTextPosition(SwingConstants.BOTTOM);
    help.setIcon(new ImageIcon(image));
    add(help);

希望你明白我想要什么。

【问题讨论】:

  • 如需尽快获得更好的帮助,请发布SSCCE。顺便说一句 - 它不需要 1554 像素宽的图像来展示所需的效果!请参阅How do I create screenshots?(有关制作出色屏幕截图的提示)。
  • 您的JToolBar 使用什么布局?

标签: java swing jmenubar jtoolbar jseparator


【解决方案1】:

我建议使用 JToolBar 而不是 JMenuBar 来执行此操作。但是如果你必须/应该/喜欢使用 JMenuBar 来做这件事,这里有一个例子:

public class Test {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                JFrame frame = new JFrame();

                JMenuBar bar = new JMenuBar();
                bar.setLayout(new MigLayout());

                JMenu listSth = new JMenu("A");
                listSth.setHorizontalTextPosition(SwingConstants.CENTER);
                listSth.setVerticalTextPosition(SwingConstants.BOTTOM);
                bar.add(listSth);

                JSeparator sep1 = new JSeparator(JSeparator.VERTICAL);
                bar.add(sep1, "growy");
                JMenu module = new JMenu("B");
                module.setHorizontalTextPosition(SwingConstants.CENTER);
                module.setVerticalTextPosition(SwingConstants.BOTTOM);
                bar.add(module);

                JMenu settings = new JMenu("Settings");
                settings.setHorizontalTextPosition(SwingConstants.CENTER);
                settings.setVerticalTextPosition(SwingConstants.BOTTOM);
                bar.add(settings);

                JMenu build = new JMenu("Builder");
                build.setHorizontalTextPosition(SwingConstants.CENTER);
                build.setVerticalTextPosition(SwingConstants.BOTTOM);
                bar.add(build);

                JSeparator sep2 = new JSeparator(JSeparator.VERTICAL);
                bar.add(sep2, "growy");

                JMenu help = new JMenu("Help");
                help.setHorizontalTextPosition(SwingConstants.CENTER);
                help.setVerticalTextPosition(SwingConstants.BOTTOM);
                bar.add(help);

                frame.setJMenuBar(bar);
                frame.pack();
                frame.setSize(400, 300);
                frame.setLocationRelativeTo(null);

                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setVisible(true);
            }
        });
    }
}

简单来说 - 您可以使用 MigLayout 并在您的 JSeparators 上设置“growy”。 还有很多其他解决方案(使用不同的布局)。

【讨论】:

    猜你喜欢
    • 2011-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-15
    • 2014-10-07
    • 2015-04-01
    • 2013-12-11
    • 2011-08-18
    相关资源
    最近更新 更多