Вы могли...
Поместите каждый JMenuItem
в Map
с нужным значением int
Map<JMenuItem, Integer> menuMap = new HashMap<JMenuItem, Integer>(25);
//...
JMenuItem item1 = ...
menuMap.put(item, 0);
JMenuItem item2 = ...
menuMap.put(item, 1);
Затем в ActionListener
вы бы просто искали его, основываясь на источнике события...
public void actionPerformed(ActionEvent e) {
JMenuItem item = (JMenuItem)e.getSource();
int index = menuMap.get(item);
Вы могли...
Используйте List
и определите индекс JMenuItem
в списке...
List<JMenuItem> menuList = new ArrayList<JMenuItem>(25);
//...
JMenuItem item1 = ...
menuList.add(item);
JMenuItem item2 = ...
menuList.add(item);
//...
public void actionPerformed(ActionEvent e) {
JMenuItem item = (JMenuItem)e.getSource();
int index = menuList.indexOf(item);
Вы могли...
Используйте API Action
.
public class IndexedAction extends AbstractAction {
private int index;
public IndexedAction(int index, String name) {
this.index = index;
putValue(NAME, name);
}
@Override
public void actionPerformed(ActionEvent e) {
// Use the index some how...
}
}
//...
JPopupMenu menu = new JPopupMenu();
menu.add(new IndexedAction(0, "Item 1"));
menu.add(new IndexedAction(1, "Item 2"));
menu.addSeparator();
menu.add(new IndexedAction(2, "Item 3"));
menu.add(new IndexedAction(3, "Item 4"));
Вы могли...
Установите свойство actionCommand
элементов...
JPopupMenu pm = ...;
pm.add("Item 1").setActionCommand("0");
pm.add("Item 2").setActionCommand("1");
menu.addSeparator();
pm.add("Item 3").setActionCommand("2");
pm.add("Item 4").setActionCommand("3");
Проблема в том, что вам придется разобрать actionCommand
из ActionEvent
обратно в int
... не очень надежное решение...
Вы могли...
Установите clientProperty
каждого JMenuItem
JPopupMenu pm = ...;
pm.add("Item 1").putClientProperty("keyValue", 0);
pm.add("Item 2").putClientProperty("keyValue", 1);
menu.addSeparator();
pm.add("Item 3").putClientProperty("keyValue", 2);
pm.add("Item 4").putClientProperty("keyValue", 3);
Но это становится грязным...
public void actionPerformed(ActionEvent e) {
JMenuItem item = (JMenuItem)e.getSource();
Object value = item.getClientProperty("keyValue");
if (value instanceof Integer) {
int index = ((Integer)value).intValue();
Вероятно, есть и другие решения, но, не зная, почему вы хотите это сделать, невозможно сделать точное предложение... извините
person
MadProgrammer
schedule
26.03.2014
int
, а не строку... в моем случае сint
было бы проще. Но если это невозможно, я уже нашел обходной путь. - person Fry   schedule 26.03.2014