2013-10-25 5 views
3

enter image description hereКак установить размер для JMenuItem?

Как вы можете видеть, это некрасиво иметь такого рода 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(), но не смог.

+0

Размер меню определяется предпочтительным размером его содержимого. Я не уверен, чего вы хотите достичь ... – MadProgrammer

+0

@Extreme Coders Недостаточно репутации. – Zalberth

+1

@MadProgrammer OneItOne.setPreferredSize (новое измерение (100,30)); работал. – Zalberth

ответ

4

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

Здесь Вы можете использовать setPreferredSize для задания размеров нужно. Вы можете указать ширину для того, что вы хотите (200 выглядит хорошо для меня). Вы можете позволить высоте оставаться autosized на основе количества пунктов меню, получая предпочтительный размер по умолчанию:

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

Этот ответ может быть улучшен с комментариями, объясняющими, как это работает. – ArtOfWarfare

0

Если вы хотите установить размер вашего 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 Предоставление вам, это похоже на выбранный ответ.