Добавляя активируемый по щелчку, запускающий действие JMenuItem непосредственно к JMenuBar?

$('field_name').innerHTML = 'Your text.';

Одна из изящных функций Прототипа - то, что $('field_name') делает то же самое как document.getElementById('field_name'). Используйте его!:-)

ответ John Topley с помощью Прототипа update функция является другим хорошим решением.

5
задан thedude19 7 December 2009 в 20:02
поделиться

3 ответа

JMenuItem плохо работает с макет JMenuBar

В строке меню используется BoxLayout, который пытается растянуть компонент до максимального размера. Попробуйте использовать:

menuItem.setMaximumSize( menuItem.getPreferredSize() );

Если вам нужна дополнительная помощь, опубликуйте свой SSCCE с указанием проблемы.

2
ответ дан 14 December 2019 в 13:38
поделиться

Следующий код реализует решение camickr, хотя я бы придумал То же самое после того, как мы увидели, как по умолчанию JMenuItem отображаются в JMenuBar . Он выглядит достаточно аутентично и реагирует на щелчки, но не на мнемонику.

Я попытался использовать ускорители JMenuItems (см. Код), и это работает, но выглядит очень странно.

public class TheDude19 extends JFrame {

   private class Action1 extends AbstractAction {
      private Action1() {
         super("Action1");
         putValue(MNEMONIC_KEY, (int) '1');
         // putValue(ACCELERATOR_KEY, KeyStroke.getKeyStroke(KeyEvent.VK_A, KeyEvent.CTRL_MASK));
      }
      public void actionPerformed(ActionEvent arg0) {
         System.out.println("Action 1!");
      }
   }
   private class Action2 extends AbstractAction {
      private Action2() {
         super("Action2");
         putValue(MNEMONIC_KEY, (int) '2');
      }
      public void actionPerformed(ActionEvent arg0) {
         System.out.println("Action 2!");
      }
   }
   private class NarrowMenuItem extends JMenuItem {

      public NarrowMenuItem(Action a) {
         super(a);
      }
      public Dimension getMaximumSize() {
         return new Dimension(super.getPreferredSize().width, super.getMaximumSize().height);
      }
   }
   public TheDude19() {
      JMenuItem menu1 = new NarrowMenuItem(new Action1());
      JMenuItem menu2 = new NarrowMenuItem(new Action2());
      JMenuBar mb = new JMenuBar();
      mb.add(menu1);
      mb.add(menu2);
      add(mb, BorderLayout.NORTH);
      setSize(400, 300);
   }

   public static void main(String[] args) {
      (new TheDude19()).setVisible(true);
   }

}
3
ответ дан 14 December 2019 в 13:38
поделиться

Возможно, вы забыли свой JMenu. Вам нужно поместить JMenuItem в JMenu, а затем добавить JMenu в JMenuBar.

Чтобы создать строку меню, вам нужно сделать что-то вроде следующего:

JMenuBar myBar = new JMenuBar();

JMenu fileMenu = new JMenu("File");

JMenuItem newFileMenuItem = new JMenuItem("New");
newFileMenuItem.addActionListener(new ActionListerner() { ... Define Action Handler here... });

fileMenu.add(newFileMenuItem);

myBar.add(fileMenu);
0
ответ дан 14 December 2019 в 13:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: