Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> действие на JMenu как на JMenuItem 
:(
    Опции темы
Sleepy_PIP
Дата 16.8.2010, 00:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 512
Регистрация: 30.6.2004
Где: Moscow

Репутация: нет
Всего: 12



подскажите чайнику - как сделать реакцию на JMenu аналогично реакции на JMenuItem?
Тоесть - для простоты - есть менюбар, в котором есть несколько пунктов меню (JMenu). каждый пункт без своих подменю (JMenuItem).

Хочется выполнить код при выборе JMenu аналогично как при выборе JMenuItem (тоесть меню выбрано, и на нем нажата кнопка мышки или enter а не selected/deselected/canceled эвенты).
Тоесть аналогично такому коду:
Код

        jMenuItem1.setText("Exit");
        jMenuItem1.setName("exitMI"); // NOI18N
        jMenuItem1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuItem1ActionPerformed(evt);
            }
        });
        jMenu1.add(jMenuItem1);
....

    private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt)
    {
        System.exit(0);
    }



попытался так:
Код

        ToolsMMMi.setName("ToolsMMMi"); // NOI18N
        ToolsMMMi.setRolloverEnabled(false);
        ToolsMMMi.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                ToolsMMMiActionPerformed(evt);
            }
        });
        mainMenu.add(ToolsMMMi);

....

    private void ToolsMMMiActionPerformed(java.awt.event.ActionEvent evt)
    {
        int j=evt.getID();
                System.exit(j);
    }



но нет - внутрь ToolsMMMiActionPerformed не входим. тоесть ToolsMMMiActionPerformed не вызывается вообще.
а хочется ...
Спасибо!




--------------------
--
Sleepy_PIP. Pavel Pryazhentsev (ex. 2:5020/141) "... Лучше быть нужным, чем
свободным ..."
PM MAIL ICQ   Вверх
jk1
Дата 16.8.2010, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 21
Всего: 75



Цитата

Хочется выполнить код при выборе JMenu аналогично как при выборе JMenuItem (тоесть меню выбрано, и на нем нажата кнопка мышки или enter

Так ведь это и есть упомянутый selected event. Он будет вброшен и при клике мышью, и при выборе с клавиатуры.
То есть вот такой код
Код

menu.addMenuListener(new MenuListener() {
            public void menuSelected(MenuEvent e) {
               // handle action here
            }

            public void menuDeselected(MenuEvent e) {
            }

            public void menuCanceled(MenuEvent e) {
            }
        });

должен обеспечивать требуемую реакцию. Или я Вас неправильно понял?


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
Sleepy_PIP
Дата 16.8.2010, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 512
Регистрация: 30.6.2004
Где: Moscow

Репутация: нет
Всего: 12



дело в том что тогда (при использовании эвентов selected/deselected/canceled) события срабатывают даже при простом "пролете" курсора над зоной JMenu ...
причем не одно.

А JMenuItem срабатывает по клику мышки и/или enter на JMenuItem находящемся в фокусе.

Конечно это все можно обрабоать а-ля JMenuItem и еще евенты на клавиатуру добавить и кнопки распознать, но ....

Хочется однотипной обработки, и конечно в 1 месте как у JMenuItem а не плодить на каждый JMenu по нескольку методов ... хотя конечно если иначе нельзя - то конечно прийдется.
Вот я пока не могу догадаться как. решение с addActionListener элегантно и логично. но однако почему оно не работает для JMenu??



--------------------
--
Sleepy_PIP. Pavel Pryazhentsev (ex. 2:5020/141) "... Лучше быть нужным, чем
свободным ..."
PM MAIL ICQ   Вверх
aleksandy
Дата 16.8.2010, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 260
Регистрация: 17.12.2006

Репутация: 1
Всего: 5



Код
JMenuBar menuBar = new JMenuBar();
menuBar.add(new JMenuItem(new AbstractAction("test") {
  public void actionPerformed(ActionEvent a) {
    JOptionPane.showMessage(null, "preved, medved!!!");
  }
}));

Оно?
PM   Вверх
Sleepy_PIP
Дата 16.8.2010, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 512
Регистрация: 30.6.2004
Где: Moscow

Репутация: нет
Всего: 12



точно. оно. теперь надо подумать как это срастить с NetBeans и его понятиями о визивиковской разработке UI. но Спасибо! направление понял.
PS: тоесть все-ж пользовать просто JMenu нельзя.


--------------------
--
Sleepy_PIP. Pavel Pryazhentsev (ex. 2:5020/141) "... Лучше быть нужным, чем
свободным ..."
PM MAIL ICQ   Вверх
aleksandy
Дата 16.8.2010, 13:31 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 260
Регистрация: 17.12.2006

Репутация: 1
Всего: 5



Цитата(Sleepy_PIP @  16.8.2010,  12:05 Найти цитируемый пост)
PS: тоесть все-ж пользовать просто JMenu нельзя.

Если тебе не нужно выпадающее меню, то зачем его использовать?

Цитата(Sleepy_PIP @  16.8.2010,  12:05 Найти цитируемый пост)
как это срастить с NetBeans и его понятиями о визивиковской разработке UI

Пиши руками, код будет намного проще и понятней. А если уж так хочется заниматься мышекликательством, то найди какой-нибудь плагин для бинса типа jigloo для eclipse. Самое большое его преимущество в том, что он анализирует код. А не создает отдельные файлы с описанием формочек. И все, что им нагенерировано, можно поправить руками.
PM   Вверх
Sleepy_PIP
Дата 16.8.2010, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 512
Регистрация: 30.6.2004
Где: Moscow

Репутация: нет
Всего: 12



так вопрос то возник именно из-за того что выпадающее меню мне НЕ нужно.
Точнее - часть головного меню - с выпадающими подменю, и 1-2 JMenu верхних - без выпадающего подменю.

А про нетбинс - не понял ... зачем ему плагины если он сам все отдлчно рисует?. При этом как в коде все может быть реализовано, так и в сериализованном виде типа ... зачем плагины то?.  толлкьо ручкам расположения и прперти внешнего вида прписывать я не буду - не производительно и не наглядно smile. ну да это только ИМХО ....
А класть на JMenuBar компонент типа JMenuItem как-то никто вроде не умеет. нет? ... вообщем буду копать дальше. Спасибо!


--------------------
--
Sleepy_PIP. Pavel Pryazhentsev (ex. 2:5020/141) "... Лучше быть нужным, чем
свободным ..."
PM MAIL ICQ   Вверх
aleksandy
Дата 16.8.2010, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 260
Регистрация: 17.12.2006

Репутация: 1
Всего: 5



Цитата(Sleepy_PIP @  16.8.2010,  19:16 Найти цитируемый пост)
А класть на JMenuBar компонент типа JMenuItem как-то никто вроде не умеет. нет?

Упомянутый мною плагин отличается от бинса именно тем, что я могу написать руками все, что я хочу и как я хочу. А он все покажет, проанализировав код.

Насколько я помню бинс создает *.form файлы, в которых описан весь GUI. Может быть это и правильно, только попробуй что-нибудь поменять в сгенерированном им коде, он нифига не покажет изменений.
PM   Вверх
jk1
Дата 16.8.2010, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 21
Всего: 75



Sleepy_PIP, 

из своего опыта могу сказать, что aleksandy прав. Руками получается куда как более наглядный код. Кроме того, есть и еще несколько преимуществ ручного кодирования Swing GUI:

1. Сложные комбинации панелей с различными LayoutManager'ами руками пишутся на порядок быстрее.

2. Интернационализацию легче и удобнее поддерживать из ручного кода.

3. Графические построители не поддерживают многих "хаков". Яркий пример тому - отрицательные значения для Border. Это, разумеется, не лучший стиль программирования, но иногда без них никак.

4. Код переносим для работы в других IDE и даже без них. Этот пункт очень важен при работе в команде. Попробуйте-ка перетащить сгенерированный GUI из NetBeans в Idea и наоборот.

5. (Самое, на мой взгляд, важное) Когда Вы пишете GUI руками, гораздо лучше понимаете сами механизмы работы Swing. Знание общих принципов, полученных в результате такой работы с лихвой восполняет незнание многих фактов.

Таким образом, ручное написание GUI-кода экономит время, а не наоборот. 


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
Skipy
Дата 17.8.2010, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 487
Регистрация: 24.8.2006
Где: Москва, Россия

Репутация: 4
Всего: 16



Цитата(jk1 @ 16.8.2010,  20:24)
отрицательные значения для Border. Это, разумеется, не лучший стиль программирования, но иногда без них никак.

А можно пример, когда без них никак? А то я как-то 12 лет обходился...


--------------------
С уважением,
Евгений aka Skipy
www.skipy.ru
PM MAIL WWW ICQ   Вверх
jk1
Дата 17.8.2010, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 21
Всего: 75



Цитата

А можно пример, когда без них никак? 

Имеется форма для редактирования паспорта здания по ГОСТу, в печатном виде это около 15 листов. Форма сплошь из разъезжающихся панелей, вкладок и прочих хитростей, направленных на то, чтобы вместить в один экран огромное количество контента. Это не ошибка дизайна - это прямое требование со стороны заказчика.

Сдача продукта.

Заказчик требует подвинуть кнопку ровно на 5 пикселей вверх прямо сейчас. Да, он понимает, что она наедет краем на другие компоненты. Но хочет. На исправление - 2 минуты, еще минута на автоматический build и deploy. Иначе остаешься без премии, которой тебе выдают большую часть зарплаты.

Поверьте, не от хорошей жизни такая похабень пишется.


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0541 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.