Domanda

io sto praticando con le classi interne, ma sto avendo difficoltà con una domanda compiti a casa: è la seguente:

Crea un BetterButtons classe componente Swing che si estende JPanel e ha tre istanze JButton etichettati come "One", "due", e "Tre". Nel costruttore di BetterButtons, scrivere un buttonListener classe locale che implementa ActionListener. Questa classe locale ha un nome String campo e un costruttore che accetta un parametro stringa che assegna al nome del campo. Il metodo actionPerformed vuoto uscite relative alla notifica console che pulsante etichettato nome è stato premuto. Nel costruttore di BetterButtons, creare tre istanze di buttonListener, uno per ogni pulsante ascoltare le sue azioni.

Sono quasi finito, però, ottengo un inizio illegale di errore espressione alla linea:

 public void actionPerformed(ActionEvent e){

Qui è il mio codice:

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

Inoltre, come posso fare riferimento al valore corretto da assegnare al nome della variabile stringa?

Grazie in anticipo

È stato utile?

Soluzione

Credo che la tua definizione di buttonListener dovrebbe essere:

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 poi passare un nome a ciascuna istanza di buttonListener, per esempio:.

  one.addActionListener(new ButtonListener("one"));
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top