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, чтобы при нажатии на них я мог вызывать их в своей программе?




Лучше всего просмотреть Руководства по 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()).
Когда кто-то спрашивает: как компонент может обрабатывать свои собственные события? Ответ на этот вопрос - использовать анонимные внутренние классы, как вы здесь показали?
Не обязательно. У вас может быть собственный компонент (например, что-то, что расширяет JComponent), а также реализует ActionListener, MouseListener и т. д.
Разве вам не нужно добавлять @Override для actionPerformed?
Вы не имеют, но это хорошая практика. Использование Override - хорошая практика, потому что она помогает вам распознать, когда вы думаете, что реализовали метод из суперкласса или интерфейса, но на самом деле вы дали своей функции неправильную сигнатуру метода. Но при написании программы на Java использование Override не требуется.
Java 9 вынуждает меня использовать @override или объявить его как лямбда-функцию \
Я не знаю, работает ли это, но я сделал имена переменных
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
}
});
}
}
@Sara - Рад, что помог! Если вы можете придумать какие-либо дополнительные пояснения, я буду рад добавить их к этому ответу.