如何设置JMenuItem的大小?

在此处输入图像描述

正如你所看到的,拥有这些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); 

只需在String中添加一些空格即可(例如"1 " ),但有没有更好的方法来设置JMenuItem的首选长度? 我尝试过OneItTwo.setSize() ,但失败了。

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; } }); 

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

 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 setMinimumSize不起作用

它看起来效果更好。 之前选择的解决方案此解决方案在我授予您之后,这与所选答案类似。