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

Foi útil?

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"));
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top