我尝试为菜单项设置最小宽度,但似乎不起作用。这是我的函数,它创建项目:

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


即使菜单项的内容发生更改,这也具有工作的优势。您将需要添加构造函数以适合您的目的。

10-01 08:14