ActionListener allgemeine Frage

Hi, ich hab da mal ne Frage:

ich kann zwar ein Event an mehrere ActionListener schicken, aber kann ein ActionListener auch mehrere Events verwalten?! steh da grad weng aufm Schlauch...

Eigentlich haben wir ja Vorlesungen dazu, allerdings kann ich die nicht besuchen, weil ich 2 Stunden entfernt auch noch ne lustige Veranstaltung hab ^^

ich will ein GUI-Menü schreiben, das in einer Titelleiste ein paar Optionen zur Auswahl hat. Jetzt muss ich da natürlich jeder Option einen ActionListener zuweisen, an die das Event gesendet wird und ich denke, es wäre EXTREM unpraktisch, da für jede Option einen eigenen EventListener zu schreiben, vor allem wird das Menü teilweise automatisch generiert.

ich könnts zwar folgendermaßen machen:

Code:
myEntry.addActionListener(new ActionListener() {
// abstrakte Klasse implementiert
});

aber ich will dann in diesem ActionListener auf eine Methode der Klasse aufrufen, in der das Menü mit den Eintränge steht.

Versteht Ihr, was ich meine? Und vor allem, kann mir da jemand helfen?
 
ActionListener ist ein Inteface, dh andere Klassen können es implementieren. Hier ein Beispiel:
Code:
public class MyFrame extends JFrame implements ActionListener {

          public MyFrame() {
 
          }

         public void actionPerformed(ActionEvent ev) {

         }

}

Jetzt kannst du im Konstruktor MyFrame als ActionListener für z.B JMenuItems registeren:
Code:
JMenuItem item1 = new JMenutItem("menuitem1");
         item1.addActionListener(this);

Wenn du die JMenuItems in actionPerformed() auseinanderhalten willst, also rausdingen willst von welchem JMenuItem das Event kam, kannst du
1. ein action command per setActionCommand() für das JMenuItem setzen und dann
per ev.getActionCommand() das command abrufen.
ODER
2. Die JMenuItems als Membervariablen instanzieren, dann kannst du mittels ev.getSource().equals(item1) rausfinden ob es von item1 kommt.

mfg
serow
 
ah, ok vielen Dank.

Und jetzt noch was anderes:

Ich würde gern auf ein Graphics-Objekt ein ImageIcon zeichnen. Da hab ich jetzt folgende Befehle zur Auswahl:

Code:
g.drawImage(myImageIcon.getImage(), linksObenX, linksObenY, new ImageObserver(myImageIcon));

oder alternativ:

Code:
myImageIcon.paintIcon(this, g, linksObenX, linksObenY);

Dummerweise funktioniert nichts von beiden, aber es wird mir auch kein Fehler ausgegeben. die ImageIcoons hab ich wie folgt instanziert:

Code:
ImageIcon myImageIcon = new ImageIcon("pathToMyPicture");

Was ist da dran falsch, bzw was muss ich noch machen, dass es die Bilder auch schön brav auf die Zeichenfläche zaubert?
 
Hmm, an den Befehlen an sich ich nichts falsch. Jedenfalls erkenne ich es nicht. Aber da du mit Graphics arbeitest liegt die Vermutung nahe, dass du die Paint-Methode von einer Komponente überschreibst und da ist die Wahrscheinlichkeit recht groß, dass du da irgendwas falsch gemacht hast.

Ich weiß nicht obs daran liegt, aber:
1. bei AWT-Komponenten musst du paint(Graphics g) überschreiben
2. bei Swing-Komponenten musst du paintComponent(Graphics g) überschreiben.
3. vergiss nicht das super.paint(g) bzw das super.paintComponent(g)

Wenns das nicht ist poste mal den ganzen Code.
 
Zurück
Oben