# JButtons in aktivieren und deaktivieren



## javalui (17. Okt 2011)

Hey ho,

ich hock hier mal wieder ein bischen vor Java und bin gerade mal wieder dabei meine Oberfläche zu erweitern.

Da ich mittlerweile rund 13 Buttons und ca. 20 JTextFields auf meinem Panel habe stellt sich mir mal wieder die frage ob es nich eine einfachere Methode gibt diese auf eine Aktion hin zu enablen bzw. zu disablen.

Nehmen wir ein einfaches beispiel

ein "Neu" button
ein "Name" Textfeld

das Textfeld ist disabled mit .setEnabled(false);
Wenn man jetzt auf neu klickt soll sich neu disablen und Name enablen.
Bisher mache ich das immer mit actions die dann eine Funktion aufrufen die in etwa so ausehen könnte:


```
private void setControllState(){
    neu.setEnabled(!neu.isEnabled());
    name.setEnabled(!neu.isEnabled());
}
```
das ganze setzt natürlich vorraus, dass die Controlls vorher in den richtigen Status gebracht wurden.

Da das aber in meinem aktuellen fall mit meinen etlichen controlls langsam viiiiiiiiiiiiiiel zu aufwendig wird frage ich mich mal wieder ob es denn nicht eine andere Möglichkeit gibt dies zu tun???

greez
JavaLui


----------



## bluna (17. Okt 2011)

könnte dir vllt sowas helfen...


```
for (Component c : getComponents(){
     c.setEnabled(true)
}
```

?

So müsstest du alle Components (JButtons), die sich in einem Container (z. B. JPanel) befinden,  (de)aktivieren können. Wenn du noch andere Objekte hast, die von Component ableiten und sich im selben Container befinden, könntest du noch eine if-Bedingung hinzufügen um sicherzustellen, dass eben nur bestimmte Components (de)aktiviert werden, beispielsweise alle Komponenten vom Typ JButton.


----------



## André Uhres (18. Okt 2011)

Hallo JavaLui,

der einfachste Ansatz ist, die Rekursion zu verwenden, um alle Komponenten eines Containers zu durchlaufen und jede Komponente einzeln zu deaktivieren. 

Ein alternativer Ansatz ist, eine Art "Glasscheibe" zu verwenden, die alle Komponenten übermalt, so dass sie wie deaktiviert aussehen und weder Fokus noch Maus noch Tastatur durchdringen können.

Die DisabledPanel Klasse bietet Lösungen für beide der oben genannten Ansätze.

Gruß,
André


----------



## javalui (18. Okt 2011)

Perfekt genau das habe ich gesucht. Das hat mich gestern abend noch so genervt, dass ich zu nichts mehr gekommen bin... und dann auch noch der Tolle Matisse der mir meine Edits andauernd anders angeortnet hat als ich es wollte...

Aber danke für die super Antwort. Ist wirklich ein super Forum hier 

greez Lui


----------

