JPopUpMenu проблема с добавлением пунктов меню - PullRequest
1 голос
/ 30 октября 2009

Я создаю JPopUpMenu со следующим кодом:

JPopupMenu popup1 = new JPopupMenu();
JPopupMenu popup2 = new JPopupMenu();

JMenuItem freeze = new JMenuItem("freeze");
freeze.addActionListener(new FreezActionListener(this));

JMenuItem unfreeze = new JMenuItem("unfreeze");
unfreeze.addActionListener(new UnFreezActionListener(this));

JMenuItem sortU = new JMenuItem("sort");
JMenuItem sortD = new JMenuItem("sort");



popup1.add(freeze);
popup1.add(unfreeze);
popup1.add(sortU);

popup2.add(freeze);
popup2.add(unfreeze);
popup2.add(sortD);

После выполнения этого кода меню popup2 работает нормально, но в popup1 есть только пункт sortU. Если я сначала добавлю пункты меню к popup2, а затем к popup1, то popup1 будет работать нормально, а popup2 - нет.

Это нормальное поведение или я что-то упустил?
Я искал об этом, но ничего не могу найти

Ответы [ 2 ]

3 голосов
/ 30 октября 2009

A JMenuItem принадлежит одному и только одному JPopupMenu (или любому другому меню). Вы не можете добавить компонент Swing более чем в один контейнер; если вы это сделаете, то компонент будет автоматически удален из предыдущего контейнера. Поэтому, когда вы добавляете freeze и unfreeze к popup2, они автоматически удаляются из popup1.

Чтобы правильно выполнить эту работу, нужно создать шесть JMenuItem с, по три для каждого меню. Тот факт, что две пары пунктов меню делают одно и то же, отражается только в том, что ActionListener делает одно и то же для каждого. Так ....

JPopupMenu popup1 = new JPopupMenu();
JPopupMenu popup2 = new JPopupMenu();

FreezActionListener freezer = new FreezActionListener(this);

JMenuItem freeze1 = new JMenuItem("freeze");
freeze1.addActionListener(freezer);
JMenuItem freeze2 = new JMenuItem("freeze");
freeze2.addActionListener(freezer);

UnFreezActionListener unfreezer = new UnFreezActionListener(this);

JMenuItem unfreeze1 = new JMenuItem("unfreeze");
unfreeze1.addActionListener(unfreezer);
JMenuItem unfreeze2 = new JMenuItem("unfreeze");
unfreeze2.addActionListener(unfreezer);

JMenuItem sortU = new JMenuItem("sort");
JMenuItem sortD = new JMenuItem("sort");



popup1.add(freeze1);
popup1.add(unfreeze1);
popup1.add(sortU);

popup2.add(freeze2);
popup2.add(unfreeze2);
popup2.add(sortD);
1 голос
/ 31 октября 2009

На самом деле лучшим решением является создание действий. Действия могут быть разделены и добавлены к нескольким компонентам (JMenuItems, JButtons и т. Д.). Вы даже можете включить / отключить действие, которое включит / отключит все компоненты одновременно.

Вы можете прочитать раздел из учебника по Swing на Как использовать действия для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...