【问题标题】:How to set a size for JMenuItem?如何为 JMenuItem 设置大小?
【发布时间】:2013-11-04 00:15:57
【问题描述】:

如您所见,拥有这种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 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(),但失败了。

【问题讨论】:

标签: java swing jmenu jmenuitem preferredsize


【解决方案1】:

setPreferredSize(new Dimension(...)); 适用于菜单项。 setMinimumSize 不起作用;菜单布局管理器似乎不尊重它,所以如果你想设置一个可能被更大的内容覆盖的最小值,或者你想设置一个最小或首选宽度而不改变高度,你必须覆盖@987654323 @ 在子类中。例如,

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

【讨论】:

    【解决方案2】:

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

    JMenuItem item = new JMenuItem();
    item.setPreferredSize(new Dimension(200, item.getPreferredSize().height));
    

    【讨论】:

    • 这个答案可以通过 cmets 解释它的工作原理来改进。
    【解决方案3】:

    如果你想设置 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

    如您所见,效果更好。 选定的解决方案 before 这个解决方案 after 我承认,这与所选答案相似。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-11
      • 2013-02-23
      • 2019-01-24
      • 1970-01-01
      • 2019-02-25
      相关资源
      最近更新 更多