Как обнаружить щелчок мышью на menuItem при добавлении через addMouseListener - PullRequest
2 голосов
/ 24 сентября 2011

Предположим, вы хотите закрыть приложение Java с помощью пункта меню «Закрыть приложение».

3 возможных решения (с использованием ActionListener или MouseAdapter или MouseListener):

menuItemClose.addActionListener(new ActionListener() {

    @Override
    public void actionPerformed(ActionEvent arg0) {
        // TODO Auto-generated method stub
        System.exit(0);
    }
});

menuItemClose.addMouseListener(new MouseAdapter() {

    @Override
    public void mouseClicked(MouseEvent e) {
        System.exit(0);
    }
});

menuItemClose.addMouseListener(new MouseListener() {

    @Override
    public void mouseReleased(MouseEvent e) {
        // TODO Auto-generated method stub
    }

    @Override
    public void mousePressed(MouseEvent e) {
        // TODO Auto-generated method stub
    }

    @Override
    public void mouseExited(MouseEvent e) {
        // TODO Auto-generated method stub
    }

    @Override
    public void mouseEntered(MouseEvent e) {
        // TODO Auto-generated method stub
    }

    @Override
    public void mouseClicked(MouseEvent e) {
        // TODO Auto-generated method stub
        System.exit(0);
    }
});

3 решения, и только первый срабатывает.

Чем это объясняется? Есть ли у некоторых других компонентов такое же поведение? Как правильно обрабатывать события в таких случаях?

Ответы [ 2 ]

2 голосов
/ 25 сентября 2011

Похоже, разработчики Java не забывают распространять события из menuItems, используя addActionListener.

Нет, разработчики предлагают использовать Action "для отделения функциональности и состояния от компонента."

2 голосов
/ 24 сентября 2011

В этом примере вы никогда не зарегистрируете KeyListener.В любом случае, вам нужно только зарегистрировать ActionListener.Для получения дополнительной информации см. Обработка событий из пунктов меню .

См. Также:

...