# jbutton setEnable() problem



## Anselmus (26. Apr 2005)

hi,

hab mal testweise ein kleine prog mit 3 buttons. zwei davon zeigen nur in einem textfeld an, welcher von den beiden grade gedrückt wurde.

der dritte soll ein neues fenster aufmachen und dann disabled werden, damit man nur ein neues fenster aufmachen kann

das neue fenster aufzumachen und den button dann zu disablen ist kein problem, aber wie mache ich, daß er wieder aktiv wird, wenn ich das fenster schließe?

muß ich da irgendwie ein eventlistener einbauen oder so?

hier mal mein ansatz:

die aufrufende app:

```
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class ButtonTest21 extends JFrame implements ActionListener{
	
	JTextField textFeld1 = new JTextField(20);
	JButton zwei_Button = new JButton("Knopf 2");
	JButton ein_Button = new JButton("Knopf 1");
	JButton noch_Button = new JButton("neues Fenster");
	
	public ButtonTest21()
	{
		super("teste mal buttons");
		
		init();
		
	}
	public void actionPerformed(ActionEvent ae)
	{
		Object eventSource = ae.getSource();
		
		if (eventSource == ein_Button)
		{
			textFeld1.setText("erster Knopf gedr?ckt");
		}
		
		if (eventSource == zwei_Button)
		{
			textFeld1.setText("zweiter Knopf gedr?ckt");
		}
		if (eventSource == noch_Button)
		{
			NeuesFenster newWindow = new NeuesFenster();
			newWindow.show();
			noch_Button.setEnabled(false);
		}
	}
	public void init()
	{
		JPanel contentPane = new JPanel();
		contentPane.add(ein_Button);
		contentPane.add(zwei_Button);
		contentPane.add(noch_Button);
		contentPane.add(textFeld1);
		
		
		ein_Button.addActionListener(this);
		zwei_Button.addActionListener(this);
		noch_Button.addActionListener(this);
		setContentPane(contentPane);
		
		
		
		WindowListener listener = new WindowAdapter()
		{
			public void windowClosing(WindowEvent we)
			{
				System.exit(0);
			}
		};
		this.addWindowListener(listener);
		this.setSize(400,400);
		this.setVisible(true);
	}
}
```

und hier das neu geöffnete fenster:


```
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;


public class NeuesFenster extends JFrame {
	
	String wasImFensterSteht = "noch nix";
	JLabel informText = new JLabel(wasImFensterSteht);
	
	public NeuesFenster()
	{
		super("neues Fenster");
		init();
	}
	public void init()
	{
		wasImFensterSteht = "hier im neuen Fenster";
		JPanel contentPane = new JPanel();
		contentPane.add(informText);
		
		setContentPane(contentPane);
		
		
		WindowListener listener = new WindowAdapter(){
			public void WindowClosing(WindowEvent e)
			{
				System.exit(0);
			}
		};
		
		this.addWindowListener(listener);
		this.setSize(200, 200);
		this.setVisible(true);
		
	}
}
```


----------



## thE_29 (26. Apr 2005)

Ich würde hier:


```
NeuesFenster newWindow = new NeuesFenster();
```

Das hier machen


```
NeuesFenster newWindow = new NeuesFenster(noch_Button);
```

Damit du mal auf den Button zugreifen kannst! 

natürlich musst du den Konstruktor umbauen:


```
private JButton  noch_Button2;
    
    public NeuesFenster(JButton jbOld)
   {
      this.noch_Button2 = jbOld;
      super("neues Fenster");
      init();
   }
 
public void init()
   {
      wasImFensterSteht = "hier im neuen Fenster";
      JPanel contentPane = new JPanel();
      contentPane.add(informText);
      
      setContentPane(contentPane);
      
      
      WindowListener listener = new WindowAdapter(){
         public void WindowClosing(WindowEvent e)
         {
            noch_Button2.setEnabled(true);
            System.exit(0);
         }
      }; 
//......
```


----------



## Anselmus (26. Apr 2005)

danke für die antwort...

funktioniert aber leider nicht so, weil ich nie in dei WindowClosing() Methode von NeuesFenster reinkommen.

ich hab mal testweise ein System.out.println("bla"); reingeschrieben (über setenable(true), um mal paar anhaltspunkte über die console zu bekommen, aber diese anweisung wird nie ausgeführt....


----------



## thE_29 (26. Apr 2005)

Tjo, das Problem ist, weil du WindowClosing hast

probier mal windowClosing (kleines w)

Dann sollte es funktionieren (bei mir gehts nun!)


PS.: Das w ist auch bei der 1. Klasse falsch!


----------

