Question

Je pratique en utilisant des classes internes mais ai du mal à une question de devoirs: Il se présente comme suit:

Créer une BetterButtons de classe composant Swing qui étend JPanel et a trois cas DButton étiquetés « One », « Deux », et « Trois ». Dans le constructeur de BetterButtons, écrire un buttonListener de classe locale qui implémente ActionListener. Cette classe locale a un champ nom de chaîne et un constructeur qui prend un paramètre de chaîne qu'il attribue au nom du champ. Le vide de la méthode actionPerformed sorties sur la notification de la console qui touche le nom marqué a été enfoncé. Dans le constructeur de BetterButtons, créer trois instances de buttonListener, un pour chaque bouton l'écoute de ses actions.

Je suis presque fini, cependant, je reçois un début illégal d'erreur d'expression à la ligne:

 public void actionPerformed(ActionEvent e){

Voici mon code:

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);
}
}

En outre, comment puis-je faire référence à la valeur propre à affecter au nom de la variable de chaîne?

Merci d'avance

Était-ce utile?

La solution

Je pense que votre définition de buttonListener devrait être:

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.");
     }

  }

Et puis passer un nom à chaque instanciation de buttonListener, par exemple:.

  one.addActionListener(new ButtonListener("one"));
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top