# Actionlistener auf Button in anderer Klasse



## NoGi (20. Feb 2004)

Servus,

habe ein kleines Problem mit den ActionListenern. Ich habe zwei Klasse, ein Hauptklasse und eine Klasse GUI. 

In der Klasse GUI definiere ich das komplette aussehen der Anwendung im Konstruktor.

In der Hauptklasse lege ich ein Object von der Klasse GUI an und setze es dann auf visible.

GUI w = new GUI();
w.setVisible(true);

In der GUI gibt es natürlich auf Buttons. Jetzt muss ich in der Hauptklasse wissen, hat der User Button 1 oder Button 2 gedrückt. Wie kann ich das in der Hauptklasse in erfahrung bringen? Kann man in der Hauptklasse eine Actionlistener auf ein Objekt einer Instanz "auflegen?" ?

PS: Ich habe auch schon den Thread http://www.java-forum.org/de/viewtopic.php?t=2342&highlight=actionlistener gelesen, ich würde es allerdings lieber mit Actionlistener lösen (wenn das möglich ist).

Vielen Dank im voraus

Gruß

NoGi

GUI



```
import java.awt.event.*;
import javax.swing.*;

public class GUI extends JFrame 
{
	public GUI()
	{
		this.setTitle("Titel");
		this.getContentPane().setLayout(null);
		this.setLocation(100,100);
		this.setSize(230,125);
		this.setResizable(false);

		// Beschreibungstext: Anzahl neue Dokumente
		JLabel labelAnzahl = new JLabel();
		labelAnzahl.setText("Anzahl:");
		labelAnzahl.setBounds(10,3,150,30);
		this.getContentPane().add(labelAnzahl);
		
		// Eingabefeld
		JTextField textFieldAnzahl = new JTextField();
		textFieldAnzahl.setBounds(10,30,205,22);
		textFieldAnzahl.setText("100");
		this.getContentPane().add(textFieldAnzahl);
		
		// OK Button
		JButton buttonOK = new JButton();
		buttonOK.setText("OK");
		buttonOK.setBounds(10,60,95,20); 
		this.getContentPane().add(buttonOK);
		buttonOK.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				System.out.println("Klasse GUI: OK");
			}			
		});

		// Abbrechen Button
		JButton buttonCancel = new JButton();
		buttonCancel.setText("Cancel");
		buttonCancel.setBounds(120,60,95,20); 
		this.getContentPane().add(buttonCancel);
		buttonCancel.addActionListener(new ActionListener()
		{
			public void actionPerformed(ActionEvent e)
			{
				System.out.println("Klasse GUI: Cancel");
			}			
		});
	}
	

}
```

HauptKlasse

```
public class MainProgram
{
	public static void main(String[] args) 
	{
		GUI w = new GUI();
		w.setVisible(true);
	}
}
```


----------



## Beni (20. Feb 2004)

Hm, ich schlage entweder so was
	
	
	
	





```
public class GUI extends JFrame{
   private JButton buttonOk;
   public GUI(){
      ...
      buttonOk = new JButton( ... );
      ...
   }

   public JButton getButtonOk(){
      return buttonOk;   
   }
}

public class MainProgram{
   public static void main(String[] args){
      GUI w = new GUI();
      w.getButtonOk().addActionListener( ... );
      w.setVisible(true);
   }
}
```

oder so was
	
	
	
	





```
public class GUI extends JFrame{
   public GUI( ActionListener listener ){
      ...
      buttonOk.addActionListener( listener );
      ...
   }

   public JButton getButtonOk(){
      return buttonOk;   
   }
}

public class MainProgram{
   public static void main(String[] args){
      ActionListener al = ...
      GUI w = new GUI( al );
      w.setVisible(true);
   }
}
```

vor.

(1. Variante ist schöner und allgemeiner, 2. dafür sicherer, weil nicht jederman Zugriff zum Button hat)

mfg Beni


----------



## nogi (21. Feb 2004)

Servus,

dein Tipp hat soweit funktioniert, noch einmal vielen Dank.

Ich habe nun leider ein anderes Problem. Dieses Programm soll ein JavaAgent für Lotus Domino werden.

Nun zu meinem Probem. Das Programm läuft wunderbar durch, allerdings nur wenn man innerhalb einer 1 Sekunde einer der beiden Buttons drückt. Geschieht dies nicht wird das Programm einfach beendet.

Ich habe in den ActionListener des OK Buttons einfach mal eine Ausgabezeile für die Console mit eingebaut, wenn ich schnell genug bin, wird diese auch ausgegeben.

Wie kann ich dem Programm nun sagen dass es solange warten muss bis eine Eingabe und/oder einer der beiden Buttons gedrückt wurde?

Für euere Hilfe schon einmal im voraus vielen Dank.

Gruß


NoGi

PS: Super Forum


----------



## Beni (21. Feb 2004)

Wenn ein JFrame sichtbar gemacht wird, stopt ein Java-Prog normalerweise nicht mehr.
Kann es sein, dass Du irgendwo ein "System.exit(...)" eingebaut hast, welches unabsichtlich aufgerufen wird?


----------



## nogi (21. Feb 2004)

Nein, leider nicht


----------

