Проблема с внутренним классом.Ошибка недопустимого начала выражения
-
19-09-2019 - |
Вопрос
Я практикуюсь в использовании внутренних классов, но у меня возникли трудности с домашним заданием:Это происходит следующим образом:
Создайте класс компонента Swing BetterButtons, который расширяет JPanel и имеет три экземпляра Jbutton с метками «Один», «Два» и «Три».В конструкторе BetterButtons напишите локальный класс ButtonListener, реализующий ActionListener.Этот локальный класс имеет имя поля String и конструктор, который принимает параметр String, который присваивается имени поля.Метод void actionPerformed выводит в уведомлении консоли, что была нажата кнопка с надписью name.В конструкторе BetterButtons создайте три экземпляра ButtonListener, по одному для каждой кнопки, слушающей ее действия.
Я почти закончил, однако получаю недопустимую ошибку начала выражения в строке:
public void actionPerformed(ActionEvent e){
Вот мой код:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class BetterButtons extends JPanel {
JButton one, two, three;
JPanel p;
public BetterButtons() {
class ButtonListener implements ActionListener {
String name;
*****public ButtonListener(String name) {****
public void actionPerformed(ActionEvent e){
System.out.println("Button "+name+"has been pressed.");
}
}
}
one = new JButton("One");
two = new JButton("Two");
three = new JButton("Three");
one.addActionListener(new ButtonListener());
two.addActionListener(new ButtonListener());
three.addActionListener(new ButtonListener());
p = new JPanel();
p.add(one);
p.add(two);
p.add(three);
this.add(p);
}
public static void main(String[] args) {
JFrame f = new JFrame("Lab 2 Exercise 2");
BetterButtons w = new BetterButtons();
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.getContentPane().setLayout(new FlowLayout());
f.getContentPane().add(w);
f.pack();
f.setVisible(true);
}
}
Кроме того, как я могу указать правильное значение, которое будет присвоено имени строковой переменной?
заранее спасибо
Решение
Я думаю, что ваше определение buttonListener должно быть таким:
class ButtonListener implements ActionListener {
String name;
public ButtonListener(String name) {
this.name = name;
}
public void actionPerformed(ActionEvent e){
System.out.println("Button "+name+"has been pressed.");
}
}
А затем передайте имя каждому экземпляру прослушивателя кнопок, например:
one.addActionListener(new ButtonListener("one"));