Problema com a classe interna. Ilegal Iniciar de erro Expressão
-
19-09-2019 - |
Pergunta
Eu estou praticando usando classes internas, mas estou tendo dificuldade com uma pergunta lição de casa: Ele é o seguinte:
Criar um balanço BetterButtons classe de componente que se estende JPanel e tem três casos JButton rotulados como "One", "Dois", e "Três". No construtor de BetterButtons, escrever uma ButtonListener classe local que implementa ActionListener. Esta classe local tem um nome de cadeia campo e um construtor que leva um parâmetro String que ele atribui ao nome do campo. O método actionPerformed vazio saídas sobre a notificação do console que o botão rotulado nome foi pressionado. No construtor de BetterButtons, crie três instâncias de ButtonListener, um para cada escuta botão para suas ações.
Eu estou quase terminando, no entanto, eu recebo um começo ilegal de erro expressão na linha:
public void actionPerformed(ActionEvent e){
Aqui está o meu código:
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);
}
}
Além disso, como posso referenciar o valor adequado a ser atribuído ao nome da variável corda?
Agradecemos antecipadamente
Solução
Eu acho que a sua definição de buttonListener deve ser:
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.");
}
}
E, em seguida, passar um nome para cada instanciação de buttonlistener, por exemplo:.
one.addActionListener(new ButtonListener("one"));