我尝试为菜单项设置最小宽度,但似乎不起作用。这是我的函数,它创建项目:
private JMenuItem newItem(String text, String iconPath) {
JMenuItem myMenuItem;
if (iconPath == null || iconPath.isEmpty()) {
myMenuItem = new JMenuItem(text);
}
else {
ImageIcon icon = new ImageIcon(iconPath);
myMenuItem = new JMenuItem(text, icon);
}
// this would work, but then setMaximumSize doesn't have any effect
// myMenuItem.setPreferredSize(new Dimension(250,20));
myMenuItem.setMinimumSize(new Dimension(250,20));
myMenuItem.setMaximumSize(new Dimension(350,20));
return myMenuItem;
}
我究竟做错了什么?
PS。我在Windows XP Service Pack 3和系统外观上使用jdk1.6
最佳答案
大多数布局管理器都会忽略最小和最大尺寸。这是一个有用的小技巧,可在任何布局管理器中强制使用这些大小:
private class MyMenuItem extends JMenuItem {
@Override
public Dimension getPreferredSize() {
Dimension preferred = super.getPreferredSize();
Dimension minimum = getMinimumSize();
Dimension maximum = getMaximumSize();
preferred.width = Math.min(Math.max(preferred.width, minimum.width),
maximum.width);
preferred.height = Math.min(Math.max(preferred.height, minimum.height),
maximum.height);
return preferred;
}
}
即使菜单项的内容发生更改,这也具有工作的优势。您将需要添加构造函数以适合您的目的。