«Метод addActionListener (ActionListener) в типе AbstractButton не применим для аргументов» ошибка - PullRequest
0 голосов
/ 17 марта 2020

Я хотел создать JFrame, где он печатает на консоли: «Это работает !!» когда вы нажимаете JButton. Ниже приведен код:

import java.awt.FlowLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JButton;
import javax.swing.JFrame;

public class CurrentlyMajorCodesCompiler extends JFrame {

public static void main (String args[]) {
CurrentlyMajorCodes CMC = new CurrentlyMajorCodes();

CMC.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}

public class CurrentlyMajorCodes extends JFrame {

private JButton ClickSpeedTest;
private tensCPS TCPS;

public CurrentlyMajorCodes () {
    super("Major Code Compiler");
    setLayout(new FlowLayout());

    ClickSpeedTest = new JButton("Click Speed Test");
    add(ClickSpeedTest);

    ClickSpeedTest.addActionListener(new MouseAdapter () {
        public void mouseClicked (MouseEvent event) {
            System.out.println("It works!!");
        }
    });

    setSize(250, 250);
    setVisible(true);
}
}

Тем не менее, по адресу: ClickSpeedTest.addActionListener, это дает мне сообщение об ошибке:

The method addActionListener(ActionListener) in the type 
    AbstractButton is not applicable for 
    the arguments (new MouseAdapter(){})`

Я не понимаю, что он пытается общаться, потому что Я никогда не использовал AbstractButton в коде и не знаю, что это такое. Может кто-нибудь помочь, пожалуйста?

Ответы [ 2 ]

1 голос
/ 17 марта 2020

Метод addActionListener () в классе AbstractButton принимает один параметр, а именно экземпляр класса, который реализует интерфейс ActionListener . Класс JButton расширяет AbstractButton и поэтому наследует этот метод.

Теперь рассмотрим класс MouseAdapter . Вы увидите, что он не реализует интерфейс ActionListener и поэтому не подходит в качестве параметра для метода addActionListener().

Для требований, описанных в вашем вопросе, я рекомендую создать собственная реализация интерфейса ActionListener. Следующее похоже на код, который вы опубликовали, и использует анонимный внутренний класс для реализации интерфейса ActionListener:

ClickSpeedTest.addActionListener(new ActionListener() {
    public void actionPerformed(java.awt.event.ActionEvent event) {
        System.out.println("It works!!");
    }
});

Обратите внимание, что вышеуказанный метод actionPerformed() будет вызываться при каждом нажатии кнопки ClickSpeedTest будь то с помощью мыши или клавиатуры или даже с помощью java кода. (См. Метод doClick () в классе AbstractButton.)

Если вы используете Java 8 или выше, тогда ActionListener - это функциональный интерфейс , то есть интерфейс, который содержит точно один абстрактный метод, и, следовательно, вы можете реализовать его, используя лямбда-выражение , что означает, что вы также можете использовать следующий код:

ClickSpeedTest.addActionListener(e -> System.out.println("It works!!"));
1 голос
/ 17 марта 2020

MouseListener отличается от ActionListener. Вам нужно использовать позже

ClickSpeedTest.addActionListener(new ActionListener () {
    public void actionPerformed (ActionEvent event) {
        System.out.println("It works!!");
    }
});
...