Frage

Ich bin mit inneren Klassen zu üben, aber habe Schwierigkeiten mit Hausaufgaben Frage: Es ist wie folgt:

Erstellen Sie eine Swing-Komponente Klasse BetterButtons, die JPanel erweitert und hat drei Jdrücken Instanzen mit „One“, „Zwei“ und „Drei“. Im Konstruktor von BetterButtons, eine lokale Klasse button dass Geräte Action schreiben. Diese lokale Klasse hat ein Feld String name und einen Konstruktor, der einen String-Parameter annimmt, dass es auf dem Feldnamen zuordnet. Die Methode void actionPerformed Ausgänge auf der Konsole Benachrichtigung, dass Schaltfläche mit der Bezeichnung Name gedrückt wurde. Im Konstruktor von BetterButtons erstellen drei Instanzen von button, einem für jede Taste Hören auf seine Aktionen.

Ich bin fast fertig, aber ich an der Linie einen illegalen Beginn des Ausdrucks Fehler:

 public void actionPerformed(ActionEvent e){

Hier ist mein 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);
}
}

Auch, wie kann ich den richtigen Wert Referenz auf den String Variablennamen zugeordnet werden?

Vielen Dank im Voraus

War es hilfreich?

Lösung

Ich denke, Ihre Definition von button sein sollte:

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

  }

Und dann einen Namen zu jeder Instanziierung button passieren, z.

  one.addActionListener(new ButtonListener("one"));
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top