Anonyme Klasse ?

Miaming

Mitglied
Hat vielleicht jemand Kenntnisse über die Programmierung einer anonymen Klasse? ich hab überhaupt keine ahnung ...

(Bitte nicht falsch verstehen ich erwarte keinen vollständigen Quelltext! Ansätze und Hilfestellungen würden mir vollkommen reichen!)


gegeben ist das hier: (wieder eine alte Klausuraufgabe)

Java:
import javax.swing.*;
import java.awt.*;

public class klausurmitjframe extends JFrame { 
	  JPanel pButtons, pPIN; 
	 JButton[] buttons; 
	 JLabel[] result; 
	  static final String[] ZAHLEN = { "0", "1", "2", "3", "4", "5" }; 
	  private final String zahl="1234"; 
	  private int ind=0; 
	 
	public klausurmitjframe() { 
	  setTitle("Sicherheitscheck"); 
	  BorderLayout bl = new BorderLayout(); 
	  bl.setHgap(5); 
	  bl.setVgap(5); 
	  setLayout(bl); 
	  pButtons = new JPanel(); 
	  pPIN = new JPanel(); 
	  GridLayout gl = new GridLayout(3, 2); 
	  gl.setHgap(5); 
	  gl.setVgap(5); 
	  pButtons.setLayout(gl); 
	  buttons = new JButton[ZAHLEN.length]; 
	   for (int i = 0; i < ZAHLEN.length; i++) { 
	   buttons[i] = new JButton(ZAHLEN[i]); 
	   buttons[i].setPreferredSize(new Dimension(100, 50)); 
	   pButtons.add(buttons[i]); 
	   buttons[i].setEnabled(true); 
	  } 
	  FlowLayout fl = new FlowLayout(); 
	  pPIN.setLayout(fl); 
	  add(pButtons, BorderLayout.CENTER); 
	  add(pPIN, BorderLayout.NORTH); 
	  result = new JLabel[zahl.length()]; 
	   for (int i = 0; i < zahl.length(); i++) { 
	   result[i] = new JLabel("_"); 
	   result[i].setName(zahl.charAt(i) + ""); 
	   pPIN.add(result[i]); 
	  } 
	} 
	  public static void main(String[] args) { 
		  klausurmitjframe h = new klausurmitjframe(); 
	  h.pack(); 
	  h.setVisible(true); 
	 } 
	}

Soweit so gut funktioniert auch alles und weiß auch wie das ganze aussieht. Allerdings bereitet mir folgende Aufgabenstellung große Probleme:

Registrieren Sie bitte Beobachter von Komponentenereignissen, durch eine anonyme
Klasse.
Beim i-ten Anklicken eines Buttons soll überprüft werden, ob die ausgewählte Zahl
mit der i-ten Ziffer des gespeicherten Zahlenschlüssels übereinstimmt.
Falls die Zahl nicht stimmt, sollen alle Buttons deaktiviert und über die Konsole eine
passende Meldung ausgegeben werden.
Falls die Zahl stimmt, soll an der entsprechenden Position ein ‚*‘ angezeigt werden.
Ist der gesamte Zahlenschlüssel korrekt eingegeben worden, soll über die Konsole
eine entsprechende Meldung ausgegeben und das Programm beendet werden.

Hinweis: Nutzen Sie hierfür die Methoden der Klasse Button (siehe Anlage).

Klasse Button
public synchronized void addActionListener(ActionListener l)
/* Adds the specified action listener to receive action events from this button. */
public void addNotify()
/* Creates the peer of the button. */
public AccessibleContext getAccessibleContext()
/* Gets the AccessibleContext associated with this Button. */
public String getActionCommand()
/* Returns the command name of the action event fired by this button. */
public String getLabel()
/* Gets the label of this button. */
public EventListener[] getListeners(Class listenerType)
/* Return an array of all the listeners that were added to the Button with
addXXXListener(), where XXX is the name of the listenerType argument. */
public synchronized void removeActionListener(ActionListener l)
/* Removes the specified action listener so that it no longer
receives action events from this button. */
public void setActionCommand(String command)
/* Sets the command name for the action event fired by this button. */
public void setLabel(String label)
/* Sets the button’s label to be the specified string.*/

Ich habe überhaupt keine Ahnung wie es sich realisieren lässt, kann mir vielleicht irgendjemand einen Rat geben?

Das einzige was ich in einer Vorlesung gefunden habe war das hier:

Java:
ActionListener a = 
new ActionListener() {
public void actionPerformed(ActionEvent e) {...}

allerdings hilft mir das für die bearbeitung der aufgabe nicht weiter kann jemand helfen?
 
Hi,
unter einer anonymen Klasse versteht man im allgemein, ein Objekt das in einem anderen Objekt erzeugt und teilweise oder komplett überschrieben wird.
Ein Objekt erzeugt man - wie du ja schon weißt - mit "MeineKlasse mk = new MeineKlasse()". Um daraus nun eine anonmye Klasse zu machen, musst du lediglich eine Methode überschreiben.
Z.b.: Die Klasse Auto hat die Methode fahren() und lenken(). Du willst jetzt eine anonmye Klasse von ebendieser Klasse Auto erstellen. Das würde dann wie folgt aussehen:
Java:
public void eineMethode() {
   Auto a = new Auto() {
      @Override
      public void fahren() {
         // Hier überschreibst du dann deine Methode
         // mit super.fahren() kannst du die "Haupt"-Implementation aufrufen.

         // Sprich was in der Methode fahren() ursprünglich drin stand
      }
   };
}
Mit dieser einfach Möglichkeit hast du den Bauplan (Klasse) vom Auto durch deinen eigenen ersetzt bzw. ergänzt. Wenn du nun a.fahren() aufrufst, so wird nicht der Methoden-Inhalt ausgeführt der in der Klasse Auto steht, sondern der, den du in der Methode beim überschreiben rein geschrieben hast.

In der GUI-Entwicklung werden häufig anonyme Klassen verwendet. Allerdings eher in Form eines Interfaces. Da ein Interface die Methoden nur definiert und nicht implementiert, wird bei folgendem Code:
Java:
public void eineMethode() {
   DasInterface i = new DasInterface() {
      // Hier wird dir die Entwicklungsumgebung alle Methoden, die in DasInterface 
      // definiert sind hinzufügen
   };
}

Ich hoffe, dass das einigermaßen verständlich war.

Gruß

Fabio
 
Hallo Fabio,

deine ausführliche Beschreibung hat mir zumindest schoneinmal den Sachverhalt einer anonymen Klasse besser verdeutlicht. Allerdings haperts bei mir gewaltig an der Umsetzung zuviel gelernt heute glaube ich ... ich versuch morgen mein Glück und nehme mir dein Baustein als Grundlage für die Umsetzung! Vielen Dank dafür schoneinmal!
 
Zurück