如何设置JMenuItem的大小?

时间:2013-10-25 02:57:30

标签: java swing jmenu jmenuitem preferredsize

enter image description here

正如你所看到的,拥有这些JMenuItem是件很难看的。菜单项的宽度非常小。

以下是代码:

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(),但失败了。

3 个答案:

答案 0 :(得分:4)

setPreferredSize(new Dimension(...));适用于菜单项。 setMinimumSize虽然不起作用;它似乎没有得到菜单布局管理器的尊重,所以如果你想设置一个可以通过拥有更大内容来覆盖的最小值,或者你想设置一个最小宽度或首选宽度而不改变高度,你必须覆盖{{ 1}}在子类中。如,

getPreferredSize()

答案 1 :(得分:1)

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

JMenuItem item = new JMenuItem();
item.setPreferredSize(new Dimension(200, item.getPreferredSize().height));

答案 2 :(得分: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 doesn't work

如你所见,效果更好。 精选解决方案 before 这个解决方案 after 我授予你,这与选定的答案类似。