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));有效。看看这个答案,可以通过解释它是如何工作的评论来改进。