Как добавить ActionListener в JButton в Java

private JButton jBtnDrawCircle = new JButton("Circle");
private JButton jBtnDrawSquare = new JButton("Square");
private JButton jBtnDrawTriangle = new JButton("Triangle");
private JButton jBtnSelection = new JButton("Selection");

Как мне добавить слушателей действий к этим кнопкам, чтобы из основного метода я мог вызывать для них actionperformed, чтобы при нажатии на них я мог вызывать их в своей программе?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
32
0
177 830
4

Ответы 4

Лучше всего просмотреть Руководства по Java Swing, особенно учебник по кнопкам.

Фрагмент короткого кода:

jBtnDrawCircle.addActionListener( /*class that implements ActionListener*/ );

Я не совсем понял, но чтобы добавить слушателя действий, вы просто вызываете addActionListener (из Abstract Button). Если это не полностью отвечает на ваш вопрос, можете ли вы предоставить более подробную информацию?

Два пути:

1. Реализуйте ActionListener в своем классе, затем используйте jBtnSelection.addActionListener(this);. Позже вам нужно будет определить метод public void actionPerformed(ActionEvent e). Однако выполнение этого для нескольких кнопок может сбивать с толку, потому что метод actionPerformed должен будет проверять источник каждого события (e.getSource()), чтобы узнать, от какой кнопки оно пришло.

2. Использовать анонимные внутренние классы:

jBtnSelection.addActionListener(new ActionListener() { 
  public void actionPerformed(ActionEvent e) { 
    selectionButtonPressed();
  } 
} );

Позже вам нужно будет определить selectionButtonPressed(). Это работает лучше, когда у вас есть несколько кнопок, потому что ваши вызовы отдельных методов для обработки действий находятся рядом с определением кнопки.

Второй метод также позволяет напрямую вызывать метод выбора. В этом случае вы можете вызвать selectionButtonPressed(), если также произойдет какое-то другое действие - например, когда сработает таймер или что-то в этом роде (но в этом случае ваш метод будет называться иначе, возможно, selectionChanged()).

@Sara - Рад, что помог! Если вы можете придумать какие-либо дополнительные пояснения, я буду рад добавить их к этому ответу.

David Koelle 04.01.2011 07:41

Когда кто-то спрашивает: как компонент может обрабатывать свои собственные события? Ответ на этот вопрос - использовать анонимные внутренние классы, как вы здесь показали?

Marko Kitonjics 24.02.2016 13:13

Не обязательно. У вас может быть собственный компонент (например, что-то, что расширяет JComponent), а также реализует ActionListener, MouseListener и т. д.

David Koelle 24.02.2016 17:18

Разве вам не нужно добавлять @Override для actionPerformed?

DoesData 03.11.2017 16:47

Вы не имеют, но это хорошая практика. Использование Override - хорошая практика, потому что она помогает вам распознать, когда вы думаете, что реализовали метод из суперкласса или интерфейса, но на самом деле вы дали своей функции неправильную сигнатуру метода. Но при написании программы на Java использование Override не требуется.

David Koelle 04.11.2017 00:19

Java 9 вынуждает меня использовать @override или объявить его как лямбда-функцию \

john ktejik 09.07.2018 07:22

Я не знаю, работает ли это, но я сделал имена переменных

public abstract class beep implements ActionListener {
    public static void main(String[] args) {
        JFrame f = new JFrame("beeper");
        JButton button = new JButton("Beep me");
        f.setVisible(true);
        f.setSize(300, 200);
        f.add(button);
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                // Insert code here
            }
        });
    }
}

Другие вопросы по теме