# ActionListener



## normaler_spinner (3. Dezember 2005)

Hallo zusammen,

ich steh mal wieder aufn Schlauch und bekomms einfach nicht hin. Habe ein JInternalFrame mit einer Menüleiste. Das Menü ist in einer eigenen Klasse. Um jetzt aber auf meine Elemente im JInternalFrame zuzugreifen erstelle ich eine innere Klasse für die ActionListener im Frame und füge die dem JMenu mittels addActionListener zu. Zur Kontrolle ob er den ActionListener aufruft soll ein Konsolentext ausgegeben werden - leider scheitert das Unterfangen schon an dieser Stelle. Irgenwie mögen mich die ActionListener wohl nicht und langsam beruht das auf Gegenseitigkeit. Ich stell mal den Code mit rein da und wäre dankbar wenn mir einer erklären kann warum das so nicht geht.


```
public class WorkFrame extends JInternalFrame{

	
	final static String NEWEXF = "neue Kostenstelle";
	final static String DELEXF = "Kostenstelle löschen";

	static int openFrameCount = 0;

	private JPanel exfPanel = null;
	private WorkFrameMenu menu = null;

        // ======== Innere Klasse Anfang =============
	class myActionListener implements ActionListener {

		public void actionPerformed(ActionEvent evt) {
			if (evt.getSource() instanceof JMenuItem) {
				if (evt.getActionCommand() == NEWEXF) {
					System.out.println("Neue Kostenstelle");
				} else if (evt.getActionCommand() == DELEXF) {
				}
			}
		}
	}

        // ======== Innere Klasse Ende =============
	
	/**
	 * Constructor of the class
	 */
	public WorkFrame(String name, double height, double width, Point location){
		
		super(null, true, true, true, true);
		this.addVetoableChangeListener(new CloseListener());
		if(name == null) name = "Kalkulation " + Integer.toString(++openFrameCount);
		setTitle(name);
		setSize((int) width,(int) height);
		setLocation(location);
				
		menu = new WorkFrameMenu();
		setJMenuBar(menu.getMenuBar());
		menu.addActionListener(new myActionListener());
	}
}
```


----------



## munuel (3. Dezember 2005)

hallo,
Leider konnt ich das Beispiel nicht ausprobieren da die imports gefehlt haben!
Hilfreich wäre unter umständen auch eine Fehlermeldung !
Viele Grüsse munuel


----------



## normaler_spinner (3. Dezember 2005)

Die Imports alleine machen ja da jetzt auch nicht glücklich, da ja auch die Klasse WorkFrameMenu fehlt und das ganze ja auch nur ein Teil eines Programmes ist. Fehlermeldungen gibt es ja auch keine. Mir gehts jetzt einfach darum das die Anweisungen aus inneren Klasse myActionListener nicht aufgerufen werden wenn ich den entsprechenden Menüeintrag wähle.


----------



## Snape (4. Dezember 2005)

Bin nicht sicher, ob ein JMenu einen ActionListener bedienen kann oder ob es ein JMenuItem sein muss. Käme auf einen Versuch an.


----------



## normaler_spinner (4. Dezember 2005)

Hallo zusammen,

danke für die Antworten ... Habe das Problem jetzt wie folgt gelöst: Die Klasse WorkFrameMenu implementiert den ActionListener und ist abstract geworden. Um sie zu nutzen wird im WorkFrame selbst eine innere Klasse von ihr abgeleitet, welche wiederrum dann die ActionListener formuliert. Wenns irgendwie einfacher geht möge man bitte hier posten - danke


```
public class WorkFrame extends JInternalFrame{

	
	static int openFrameCount = 0;

	private JPanel exfPanel = null;
	private WorkFrameMenu menu = null;

        // ======== Innere Klasse Anfang =============
	class myMenu extends WorkFrameMenu {

		public void actionPerformed(ActionEvent evt) {
			if (evt.getSource() instanceof JMenuItem) {
				if (evt.getActionCommand() == NEWEXF) {
					System.out.println("Neue Kostenstelle");
				} else if (evt.getActionCommand() == DELEXF) {
				}
			}
		}
	}

        // ======== Innere Klasse Ende =============
	
	/**
	 * Constructor of the class
	 */
	public WorkFrame(String name, double height, double width, Point location){
		
		super(null, true, true, true, true);
		this.addVetoableChangeListener(new CloseListener());
		if(name == null) name = "Kalkulation " + Integer.toString(++openFrameCount);
		setTitle(name);
		setSize((int) width,(int) height);
		setLocation(location);
				
		setJMenuBar(new myMenu().getMenuBar());
		
	}
}
```


----------



## Snape (5. Dezember 2005)

Nun, üblicherweise werden ActionListener anonym implementiert...

```
menuItem.addActionListener(
new ActionListener()
{
 public void actionPerformed(ActionEvent e)
 {
   // tu was du willst
 }
});
```

Ich persönlich finde das auch einfacher...


----------

