2010-02-10 3 views
0

Je pratique en utilisant des classes internes, mais je suis la difficulté avec une question de devoirs: Il se présente comme suit:Problème avec la classe interne. Début illégale d'erreur d'expression

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, écrivez une classe locale ButtonListener qui implémente ActionListener. Cette classe locale a un nom String String et un constructeur qui prend un paramètre String qu'il affecte au nom du champ. La méthode void actionPerformed produit sur la notification de la console que le nom du bouton a été pressé. Dans le constructeur de BetterButtons, créez trois instances de ButtonListener, une pour chaque bouton écoutant 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 bonne valeur à affecter au nom de la variable chaîne?

Nous vous remercions à l'avance

Répondre

1

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")); 
+2

Notez que la OP mentionné dans la description que c'est de l'aide sur les devoirs. – akf

+2

En effet - et l'OP était très proche d'une solution - et la meilleure façon de souligner la légère erreur de syntaxe était par un exemple - un exemple à travers lequel ils sont susceptibles d'apprendre la structure de Java de manière plus approfondie. – Chaos

Questions connexes