
正如你所看到的,有这样的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(),但失败了。
发布于 2013-10-25 11:15:46
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;
}
});发布于 2014-12-10 22:26:46
在这里,您可以使用setPreferredSize指定所需的尺寸。你可以指定宽度到任何你想要的(200在我看来很好)。通过获取默认的首选大小,可以允许高度根据菜单项的数量自动调整大小:
JMenuItem item = new JMenuItem();
item.setPreferredSize(new Dimension(200, item.getPreferredSize().height));发布于 2016-04-30 04:32:18
如果你想设置你的宽度的大小(在我的例子中是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
正如你所看到的,它工作得更好。Selected solution before This solution after I grant,这与选择的答案类似。
https://stackoverflow.com/questions/19580343
复制相似问题