Pregunta

Estoy practicando el uso de clases internas, pero estoy teniendo dificultad con una pregunta tareas: Es como sigue:

Crear una clase BetterButtons componente Swing que se extiende JPanel y tiene tres casos JButton etiquetados "uno", "dos" y "tres". En el constructor de BetterButtons, escribir una buttonListener clase local que implementa ActionListener. Esta clase local tiene un nombre de cadena campo y un constructor que toma un parámetro de cadena que se asigna al nombre del campo. El vacío método actionPerformed salidas de la consola que la notificación botón de nombre de la etiqueta se ha pulsado. En el constructor de BetterButtons, crear tres instancias de buttonListener, uno para cada botón escuchar sus acciones.

Estoy casi terminado, sin embargo, me sale un error de inicio ilegal de expresión en la línea:

 public void actionPerformed(ActionEvent e){

Aquí está mi 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);
}
}

Además, ¿cómo puedo hacer referencia a que el valor adecuado para ser asignado al nombre de variable de cadena?

Gracias de antemano

¿Fue útil?

Solución

Creo que su definición de buttonListener debe 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.");
     }

  }

Y a continuación, pasar un nombre a cada instancia de buttonListener, por ejemplo:.

  one.addActionListener(new ButtonListener("one"));
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top