3

在此处输入图像描述

如您所见,拥有这种JMenuItems 是丑陋的。菜单项的宽度非常小。

这是代码:

JMenu menuOne=new JMenu("MenuOne");
    JMenu menuTwo=new JMenu("MenuTwo");
    JMenu menuThree=new JMenu("MenuThree");
    JMenu menuFour=new JMenu("MenuFour");
    JMenuBar mbar=new JMenuBar();
    //add the menu to menubar
    mbar.add(menuOne);
    JMenuItem OneItOne=new JMenuItem("1");

    JMenuItem OneItTwo=new JMenuItem("2");
    menuOne.add(OneItOne);
    menuOne.addSeparator();
    menuOne.add(OneItTwo);
    mbar.add(menuTwo);
    mbar.add(menuThree);
    mbar.add(menuFour);
    setJMenuBar(mbar);

简单地在字符串中添加一些空格是可以的(例如"1     "),但是有没有更好的方法来设置首选长度JMenuItem?我试过OneItTwo.setSize()了,但失败了。

4

3 回答 3

4

setPreferredSize(new Dimension(...));适用于菜单项。setMinimumSize虽然不起作用;菜单布局管理器似乎不尊重它,所以如果你想设置一个可能被更大的内容覆盖的最小值,或者你想在不改变高度的情况下设置一个最小或首选宽度,你必须getPreferredSize()在一个子类。例如,

menuOne.add(new JMenuItem("1") {
    @Override
    public Dimension getPreferredSize() {
        Dimension d = super.getPreferredSize();
        d.width = Math.max(d.width, 400); // set minimums
        d.height = Math.max(d.height, 300);
        return d;
    }
});
于 2013-10-25T03:15:45.610 回答
1

在这里,您可以使用setPreferredSize来指定您需要的尺寸。您可以指定任何您想要的宽度(200 对我来说看起来不错)。您可以通过获取默认的首选大小来允许高度根据菜单项的数量保持自动调整大小:

JMenuItem item = new JMenuItem();
item.setPreferredSize(new Dimension(200, item.getPreferredSize().height));
于 2014-12-10T14:26:46.203 回答
0

如果要设置 JMenuItem 的大小(在我的情况下为宽度)。您可以使用此解决方案更改宽度:

 JMenuItem returnMenu = new JMenuItem(action) {
            @Override
            public Dimension getPreferredSize() {
                Dimension preferred = super.getPreferredSize();
                Dimension minimum = getMinimumSize();
                Dimension maximum = getMaximumSize();
                preferred.width = Math.min(Math.max(preferred.width, 200),
                        maximum.width);
                preferred.height = Math.min(Math.max(preferred.height, minimum.height),
                        maximum.height);
                return preferred;
            }
        };

我只是重用了这个解决方案:JMenuItem setMinimumSize 不起作用

如您所见,它效果更好。之前选择的解决方案 这个解决方案 我授予你之后,这类似于选择的答案。

于 2016-04-29T20:32:17.600 回答