Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何设置JMenuItem的大小?_Java_Swing_Jmenu_Jmenuitem_Preferredsize - Fatal编程技术网

Java 如何设置JMenuItem的大小?

Java 如何设置JMenuItem的大小?,java,swing,jmenu,jmenuitem,preferredsize,Java,Swing,Jmenu,Jmenuitem,Preferredsize,正如您所看到的,有这样的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 t

正如您所看到的,有这样的
JMenuItem
s是很难看的。菜单项的宽度很小

代码如下:

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

setPreferredSize(新维度(…)适用于菜单项<代码>设置最小值大小
不起作用;菜单布局管理器似乎并不尊重这一点,因此,如果您想设置一个最小值,该最小值可能会被较大的内容覆盖,或者您想在不更改高度的情况下设置最小或首选宽度,则必须在子类中覆盖
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;
    }
});

在这里,您可以使用
setPreferredSize
指定所需的尺寸。你可以指定你想要的宽度(200我觉得很好)。通过获取默认的首选大小,可以根据菜单项的数量自动调整高度:

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

如果您想设置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 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;
            }
        };
正如你所看到的,它工作得更好。 选定的解决方案 这个解决方案
我承认,这与所选答案类似。

菜单的大小由其内容的首选大小定义。我不确定你想要实现什么…@极端程序员没有足够的声誉。@madProgrammerOneItone.setPreferredSize(新维度(100,30));有效。看看这个答案,可以通过解释它是如何工作的评论来改进。