tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von Fabio Hellmann
ERLEDIGT
NEIN
ANTWORTEN
2
ZUGRIFFE
350
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Miaming Miaming ist offline Mitglied Bronze
    Registriert seit
    May 2011
    Beiträge
    40
    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)

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    
    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:

    Code java:
    1
    2
    3
    
    ActionListener a = 
    new ActionListener() {
    public void actionPerformed(ActionEvent e) {...}

    allerdings hilft mir das für die bearbeitung der aufgabe nicht weiter kann jemand helfen?
     

  2. #2
    Avatar von Fabio Hellmann
    Fabio Hellmann Fabio Hellmann ist gerade online Mitglied Brokat
    Registriert seit
    Aug 2011
    Ort
    München
    Beiträge
    494
    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:
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    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:
    Code java:
    1
    2
    3
    4
    5
    6
    
    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
    Miaming bedankt sich. 
    Bitte die Code-Tags verwenden. Bei Java-Code: [java]...[/java]

    Tutorials:
    Automatisches erzeugen eines Inhaltsverzeichnisses (Javascript)
    JAnimationPanel - Animationen für Swing/AWT
    SWTRatingBar (Bewertungs-Composite) selbst programmieren
    ____________________________________________________________________________
    Über eine Bewertung (Stern links unter dem Beitrag) oder ein Danke freue ich mich sehr.

  3. #3
    Miaming Miaming ist offline Mitglied Bronze
    Registriert seit
    May 2011
    Beiträge
    40
    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!
     

Ähnliche Themen

  1. anonyme TLD oder TLD wo daten nicht einsehbar sind
    Von Maniac im Forum Hosting & Webserver
    Antworten: 3
    Letzter Beitrag: 01.06.11, 16:03
  2. Anonyme SMS nach verfolgen?
    Von DexXxtrin im Forum Internetkommunikation
    Antworten: 1
    Letzter Beitrag: 20.10.10, 10:54
  3. Classloader und anonyme Klassen
    Von Germanterminaotr im Forum Java Grundlagen
    Antworten: 0
    Letzter Beitrag: 01.02.10, 13:27
  4. Anonyme Methoden und lokaler Zustand
    Von Thomas Darimont im Forum .NET Café
    Antworten: 0
    Letzter Beitrag: 30.12.06, 20:31
  5. Anonyme Proxies
    Von nordi im Forum Netzwerke
    Antworten: 1
    Letzter Beitrag: 04.04.04, 00:12