2015-06-24 2 views
0

Я не знаю, является ли название понятным. Как бы то ни было, у меня есть JMenuItems, и для них я создал mouseListener.Имитировать JMenuItem MouseListener на JButton

mntmExtractPaleographyFeature.addMouseListener(this); 

где mntmExtractPaleographyFeature является JMenuItem и это класс, который реализует MouseListener.

Так я добавил метод MouseListener как

@Override 
public void mouseReleased(MouseEvent arg0) { 
    if(arg0.getSource()==mntmExtractPaleographyFeature) { 
     //Code Here 
    } 

Теперь у меня есть этот JButton extractPaleographyB что делает точный то же самое в JMenuItem. Я не хочу копировать/вставлять код два раза (также потому, что это не единственная кнопка/jmenuitem). Я пробовал с

extractPaleographyB.addMouseListener(mntmExtractPaleographyFeature.getMouseListeners()[1]); 

но он не работает. Есть идеи?

+0

Вы пробовали с помощью ActionListener для JButton, то имеет как обработчик MouseListener и обработчик ActionListener как вызвать тот же отдельный метод? –

ответ

2

Создать Action и использовать как для пункта и кнопки меню

Кусок кода из учебника

Action leftAction = new LeftAction(); //LeftAction code is shown later 
... 
button = new JButton(leftAction) 
... 
menuItem = new JMenuItem(leftAction); 

Чтобы создать объект действий, вы вообще создать подкласс AbstractAction, а затем создать его экземпляр , В вашем подклассе вы должны реализовать метод actionPerformed, чтобы реагировать соответствующим образом, когда происходит событие действия. Вот пример создания и создания экземпляра AbstractAction подкласса:

leftAction = new LeftAction("Go left", anIcon, 
      "This is the left button.", 
      new Integer(KeyEvent.VK_L)); 
... 
class LeftAction extends AbstractAction { 
    public LeftAction(String text, ImageIcon icon, 
         String desc, Integer mnemonic) { 
     super(text, icon); 
     putValue(SHORT_DESCRIPTION, desc); 
     putValue(MNEMONIC_KEY, mnemonic); 
    } 
    public void actionPerformed(ActionEvent e) { 
     displayResult("Action for first button/menu item", e); 
    } 
} 
+0

Так что я должен создать класс для каждой кнопки и jMenuItem? –

+1

@ AntonioCalì: для каждой кнопки/пункта меню, которая имеет уникальную функцию. Например, если бы я должен был создать класс Calculator, я бы использовал один класс Action для всех своих числовых кнопок, поскольку все они выполняют одну и ту же основную вещь, с той лишь разницей, что это число, которое они представляют. 1+ –

+0

Хорошо ли создавать класс вместо этого, используя метод mouseListener? –