# CaretListener: leere Textfelder = Button sperren



## NobbyNobbs (6. Dez 2012)

Hallo ! 

Ich habe eine GUI mit mehreren textfeldern und Buttons erstellt. 
Solange einige ausgewählte Textfelder leer sind, sollen einige ausgewählte Buttons gesperrt bleiben. 

Mit meinem caretListener funktioniert das bei 1 Textfeld und 1 Button problemlos. Aber ich schaffs einfach nicht die if Abfrage so zu erweitern, dass eben mehrere Textfelder überwacht werden. 

Mit:

If (text1.isEmpty() && text2.isEmpty() && text3...)
Button1.setVisible(false)...
Else button1.setVisible(true)....

Funktioniert es nicht. 

Verzeiht bitte die unübersichtliche Schreibweise des codes. Ich sitze nicht am PC. 
Ich hoffe mein Anliegen ist trotzdem verständlich. 

Mercí


----------



## SlaterB (6. Dez 2012)

ohne ein ausführbares Testprogramm ist die Aussage leer,
ich behaupt die Sonne ist grün, und nun?

zumal 'funktioniert nicht' alles mögliche bedeuten kann, 
a) passiert nichts, was verschiedene Ursachen haben kann, Code wird gar nicht ausgeführt usw.
b) Fehlermeldungen diverser Art, etwa text1, text2 usw. gar nicht an dieser Stelle zugreifbar


----------



## TryToHelp (6. Dez 2012)

generell ifs wie folgt aufbauen (geschweifte Klammern), das kann schon der Grund sein, wenn du mehrere Anweisungszeilen hast


```
if (Bedingung){
   Anweisung1
   Anweisung2
   ...
}else{
   Anweisung 4
   Anweisung 5
}
```


----------



## NobbyNobbs (6. Dez 2012)

Danke für die schnellen Kommentare ! 

Wie gesagt sitze ich nicht am PC und habe keinen Zugriff auf meinen Code. Heute Abend kann ich ihn nachreichen. 

Es kommt keine Fehlermeldung und wenn ich die Textfelder ausfülle, bleibt der Button gesperrt. 

Meiner Ansicht nach, mache ich einen Fehler in der if Bedingung. Ein einzelnes Textfeld kann ich mit 

If (text1.isEmpty()){
    Button.setVidibel(false)
}else{
   Button.setVisibel(true)
}

sperren. 
Sobald ich aber die Bedingung mit && erweitere bleibt der Button gesperrt nachdem ich die Textfelder ausgefüllt habe. 

Vielleicht sollte ich meine frage anders stellen:
Wie kann ich einen Button sperren und erst freigeben wenn zb 5 Textfelder ausgefüllt sind ?

Mercí


----------



## fastjack (6. Dez 2012)

Zum sperren würde ich setEnabled(false) verwenden.


----------



## RaideR (6. Dez 2012)

Ah jetzt verstehe ich...


```
If (text1.isEmpty() && text2.isEmpty() && text3...)
Button1.setVisible(false)...
Else button1.setVisible(true)....
```

Das hast du ja in deinem ersten Post geschrieben.
Du hast Recht - es liegt an der falschen Logik der If-Bedingung. Du überprüfst ja folgendes: Wenn ALLE Felder leer sind, dann soll der Button ausgeblendet werden. Wenn aber nun EINS der Felder einen Text enthält, dann blendet er den Button ein.


----------



## fastjack (6. Dez 2012)

Trotzdem, setVisible() ist nicht ok, finde ich. Dann verschwindet der Button, nimmst Du setEnabled() wird er ausgegraut und ist nicht drückbar.


----------



## SlaterB (6. Dez 2012)

> Sobald ich aber die Bedingung mit && erweitere bleibt der Button gesperrt nachdem ich die Textfelder ausgefüllt habe. 

gib an der fraglichen Stelle aus, was in den Textfeldern drinsteht, welchen Wert isEmpty() jeweils zurückliefert,
schreibe eine Ausgabe ins if und ins else um zu prüfen, was drankommt,

es gibt immer viel mehr Ursachen als falscher Code, 
vielleicht werden Textfelder geprüft die nicht in der GUI stehen, vielleicht kommt der Code gar nicht dran,
vielleicht geht alles bestens und doch am Ende Anzeige falsch weil kurz danach noch anderer Code drankommt usw.


----------



## NobbyNobbs (7. Dez 2012)

In einem anderen Forum wurde meine Frage mit dem ersten Kommentar beantwortet. 
Ich muss die Bedingung mit || (oder) und nicht mit && verknüpfen. 
Danke für eure Bemühungen


----------



## SlaterB (7. Dez 2012)

interessant, 
mal abgesehen von der Erwähnung anderer Foren, hoffentlich bleibst du dann da, kann man genaus hämisch antworten  Spass muss sein

nochmal deine Aussagen dazu angeschaut:
"Solange einige ausgewählte Textfelder leer sind, sollen einige ausgewählte Buttons gesperrt bleiben. "

beinhaltet leider nicht, ob die Sperrung bei einem oder allen ausgefüllten Textfeldern aufgehoben wird,
das könnte man freilich nachfragen


"Es kommt keine Fehlermeldung und wenn ich die Textfelder ausfülle, bleibt der Button gesperrt."
"Sobald ich aber die Bedingung mit && erweitere bleibt der Button gesperrt nachdem ich die Textfelder ausgefüllt habe."

das passt irgendwie gar nicht ins Konzept,
es ist wieder höchstens unklar wie viele du ausfüllst, 'die Textfelder' klingt nach allen, jedenfalls am wenigsten  nach einem davon,
spätestens bei allen müsste sich doch was tun, selbst bei && statt ||,
außerdem nach dem Code eher andersrum, es wird eher zu früh freigegeben als gesperrt (visible true/false)

die Tendenz geht hier dazu, dass der Code gar nicht ausgeführt wird


"Vielleicht sollte ich meine frage anders stellen:
Wie kann ich einen Button sperren und erst freigeben wenn zb 5 Textfelder ausgefüllt sind ?"

klingt wiederum nach 'erst wenn alle Textfelder befüllt sind', also &&, nicht 'wenn eines der Textfelder befüllt ist', also ||

also ich bin selbst jetzt noch nicht wirklich schlauer 


dazu kommt natürlich, dass man immer umformen kann:
De Morgan?sche Gesetze ? Wikipedia

if (A leer && B leer && C leer ..)
ist gleichbedeutend zu
if (A nicht leer || B nicht leer || C nicht leer ..)


wie auch immer

-------

edit:

ah, jetzt habe ich es:

```
If (text1.isEmpty() && text2.isEmpty() && text3...)
Button1.setVisible(false)...
Else button1.setVisible(true)....
```
heißt: 
sobald in einem Textfeld etwas drinsteht, wird Button1 angezeigt,
wenn aber alle leer sind, dann nicht anzeigen,

und du willst:
sobald in allen Textfeld etwas drinsteht, wird Button1 angezeigt,
wenn aber eines leer ist, dann nicht anzeigen,

dazu passen deine Aussagen dann doch, nicht erkannt


----------



## NobbyNobbs (7. Dez 2012)

Naja. Die Tatsache, dass ich auch in anderen Foren Hilfe suche ist ja ausdrücklich gewollt und darf nicht gegen mich verwendet werden, nicht war ?

Punkt 1 aus "vor dem ersten Posten lesen" heißt
"Bevor du postest könntest du noch bei google anfragen."

Dadurch stößt man automatisch auf andere Foren oder Tutorials. 

Es tut mir leid, wenn ich meine Frage nicht allgemein verständlich stellen konnte. Ich hab ja versucht sie umzuformulieren. Vielleicht war es falsch von mir zu Glauben, dass sich meine Frage auf einen alltäglichen Codebaustein bezieht, den die User hier aus dem ff rezitieren können. Evtl hab ich auch zu weit ausgeholt und hätte einfach fragen sollen, wie ich es anstelle einen Button so lange zu sperren, bis 5 Textfelder ausgefüllt sind, ohne meine eigenen versuche zu Posten.  

Ich werd mich bei meinem nächsten Problem sicher daran halten und meine Frage so komprimiert wie nur möglich stellen. Sollte dafür Code nötig sein, warte ich bis ich am Rechner sitzen kann und nutze nicht das mobile Internet. 

Mercí


----------



## SlaterB (7. Dez 2012)

siehe auch meinen edit wenn zu spät, war durchaus schon gut gestellt, spätestens ab
'Wie kann ich einen Button sperren und erst freigeben wenn zb 5 Textfelder ausgefüllt sind ?'
lag es dann wirklich an anderen, auch an meiner Nase 


andere Foren sind durchaus gut, 
ganz nach Vorschrift dann hier ruhig nebenher erwähnen, damit nicht doppelt gearbeitet wird,
aber das auch nur zur Ergänzung da wir gerade dabei sind


----------

