Richtiger Umgang mit ActionEvents?
-
Hi,
hab da ein Problem mit dem EventHandling bie AWT Programmen.
Ich möchte beim Klicken mit der Maus auf den Menüeintrag "Öffnen", dass ich
eine Datei öffnen kann. Die ganz normale Auswahlliste vom Betriebssystem soll erscheinen. Leider hab ich keinen blasse Schimmer wie das Implementieren, Registrieren beim Empfänger mit den ActionEvents funzt. Mit den KeyEvents war das ja noch nachvollziehbar in GoToJava2.import java.awt.*; import java.awt.event.*; class Hauptmenu extends MenuBar { public Hauptmenu() { Menu m = new Menu("Datei"); m.add(new MenuItem("Öffnen")); //hier muss irgendwo die Registrierung hin //addActionListener(); hat nicht gefunzt this.add(m); } } public class ActionFenster extends Frame implements ActionListener //Implementierung des Interface { public ActionFenster() { super("Action Events"); setLocation(100,100); setSize(200,100); setMenuBar(new Hauptmenu()); setVisible(true); } public static void main(String argv[]) { ActionFenster wnd = new ActionFenster(); } public void actionPerformed(ActionEvent event) { // Hier soll der Code zum Aufruf rein.... } }
Hätte das gerne in der Variante für sehr kleine Programme, siehe unten:
Danke für eure Hilfe. Kennt jemand übrigens gute Online Tuts die leichter
verständlich für blutige Anfänger in Java sind als GoToJava2 oder der Nachfolger?/*Ereignisbehandlung durch Implementierung eines EventListeners-Interface*/ import java.awt.*; import java.awt.event.*; public class Ereignisse extends Frame implements KeyListener//Implementierung eines EventListener Interface { public static void main(String argv[]) { Ereignisse wnd = new Ereignisse(); } public Ereignisse() //Konstruktor { super("Fenster"); setLocation(100,100); setSize(300,200); setVisible(true); addKeyListener(this); //Registrierung beim Empfänger } /*Methoden die die Klasse durch das Interface KeyListener implementiert*/ public void keyPressed(KeyEvent event) { if(event.getKeyCode() == KeyEvent.VK_ESCAPE){ setVisible(false); dispose(); System.exit(0); } } public void keyReleased(KeyEvent event) { } public void keyTyped(KeyEvent event) { } }
-
Du musst dem MenuItem einen ActionListener via addActionListener spendieren der auf deine Ereignisklasse zeigt.
-
So ich hab es jetzt geschafft, auch wenn es vielleicht nicht die eleganteste Lösung ist.
Meine gar lustige Aufgabe besteht nun darin, dass wenn ich auf den Menüeintrag "Neu" klicke, jedesmal der String "Das war das xte ActionEvent" geschrieben wird. Mache ich dies, überschreibt er den Text; er soll aber immer darunter angezeigt werden. Ich brauche also ein Schleifenkonstrukt mit Zähler, der dann mit ausgegeben wird, aber wie kann ich feststellen wie oft ich auf Neu geklickt habe.
Bei MouseEvents konnte ich immer mit getMouseClicked() abfragen wie oft ich auf eine freie Bildschirmfläche geklickt habe und das hat er mit dann auch in ausgespuckt, aber ActionEvent bietet sowas ja nicht.
Kann mit bitte wer helfen, das zu konstruieren. siehe unten.
Danke, ist wirklich dringend..class MainMenu extends MenuBar { public MainMenu(ActionListener listener) { Menu m = new Menu("Datei"); MenuItem g = new MenuItem("Neu"); g.setActionCommand("Neu"); g.addActionListener(listener); m.add(g); this.add(m); } } public class ActionEreignis extends Frame implements ActionListener { public static void main(String[] args) { ActionEreignis wnd = new ActionEreignis(); } public ActionEreignis() { super("Menü-ActionEvents"); setLocation(100,100); setSize(400,300); setMenuBar(new MainMenu(this)); setVisible(true); } public void actionPerformed(ActionEvent event) { Graphics g = getGraphics(); g.drawString("Das war das "+cnt+" ActionEvent", 30, 100); } }