# setEnabled(false); Problem



## Doc (18. Sep 2010)

Hallo,
ich bins mal wieder.

Sind irgendwelche "Bugs" in Verbindung mit dem setEnabled Befehl bekannt?

Vielleicht bin ich etwas vorschnell, aber ich kann mir aber keine andere Erklärung vorstellen.

Wenn ich auf einen Button setEnabled(false) lege, sodass er sich selbst deaktiviert,
dann läuft bei der Ausführung irgendwas schief.
Also es keine exception, aber im Programm wird im Prinzip ein Element, wie von einem Mausklick, markiert. Also ein TextPane ändert seine Farbe als ob es angeklickt werden würde.

Entferne ich den Befehl, oder setze den Wert TRUE tuts wunderbar. Der Befehl macht doch nichts ausser einen Button zu aktivieren/deaktivieren. Wie kann der Befehl mein Programm beeinflussen?

Ein anderer Button der dieselbe Funktionalität hat, macht keine Schwierigkeiten.

Ich steh vor einem Rätsel. Hoffenltich weiss von euch jemand Bescheid.

Danke schonmal im Vorraus.


----------



## diel2001 (18. Sep 2010)

Am besten ist du zeigst uns ein Stück Code, bei dem das passiert.


----------



## Doc (18. Sep 2010)

Also nochmal genau:
Ich hab einen Button. Wenn ich den Button selbst deaktiviere mit setEnabled(false),
dann wird beim Klicken des Buttons der FocusListener ausgeführt und zwar an der ersten Stelle eines Textpanes in einem GridLayout.
Lass ich setEnabled(false) weg, oder setze den Wert auf TRUE, dann wird der Focuslistener nicht ausgelöst!

Der FocusListener darf an der Stelle übrigens nicht ausgelöst werden. Das macht überhaupt keinen Sinn. ;(

Es sind sogar 2 Buttons die den Focus verlieren lassen und bekommen ihn auch direkt danach wieder neu.

Alles abhängig von dem setEnabled Befehl.


----------



## Runtime (18. Sep 2010)

Poste ma den Code.


----------



## Doc (18. Sep 2010)

Also ein zweiter Button hat dieselbe Funktionalität, da funktionierts. Und Code posten ist jetzt nicht ganz so einfach, da müsste ich einiges zusammensuchen.

Daher wollte ich erstmal fragen ob irgendwelche Bugs bekommt sind, da die Sache für mich überhaupt keinen Sinn macht.

Ich hab jetzt eine System.out.println-Ausgabe die Bescheid gibt wann der Focuslistener Focus bekommt und wann er ihn verliert.
Und wie gesagt, mit setEnabled(false) treten die Probleme auf, da der FocusListener zuschlägt.
Ohne den Befehl, oder auf den Wert TRUE gesetzt, meldet der FocusListener nichts!


----------



## Runtime (18. Sep 2010)

Ich habe echt keine Ahnung! Für was bräuchtest du den FocusListener denn?


----------



## Doc (18. Sep 2010)

Mit dem FocusListener klicke ich in eine Feld mit mehreren TextPanes.
Hab jetzt noch rausgefunden, das ein anderer Button dieselben Probleme macht, wenn er sich mit set.Enabled(false) selbst deaktiviert. Daran scheints wohl zu liegen, aber wie gesagt, ich hab noch andere Buttons bei denen es keine Probleme macht.


----------



## diel2001 (18. Sep 2010)

Der FocusListener liegt wahrscheinlich auf dem Container, in dem der Button liegt oder ??
Dann ist es, eigentlich logisch, da der Button wenn er disabled ist , wahrscheinlich keinen ActionListener mehr hat oder eben keine hohe Priorität hat und der FocusListener zuschlägt


----------



## Doc (18. Sep 2010)

Es liegen noch weitere Buttons auf dem Panel bei denen es keine Schwierigkeiten gibt.

Wenn ich alle setEnable Befehle weglasse, und somit alle Buttons aktiviert sind, dann treten auch keine Probleme auf. Also wirds kein Container Problem sein.

Ausserdem liegt der Focuslistener garnicht auf diesem Container.


----------



## Doc (18. Sep 2010)

Ergänzung:
Auf beiden Buttons die Probleme machen werden setFocusable(true/false); Befehle ausgelöst.
Aber wie gesagt: Ich habe andere Buttons mit der identischen Funktionalität, die keine Schwierigkeiten machen.
Und ohne die setEnable(false)-Befehle gehts auch.

Falls es ein Bug ist, meint ihr unter Linux könnte es funktionieren?


----------



## Doc (18. Sep 2010)

und noch eine Ergänzung:

zur Erklärung: Ich hab links und rechts jeweils die gleichen Buttons mit der identischen Funktionalität.
Die linke Seite tut nicht, die rechte funktioniert.

Wenn ich nun das Layout so änder, dass die linke Seite rechts und die rechte links ist, dann tut wieder die linke Seite nicht aber wieder die rechte. Es liegt also nicht an den Buttons.


----------



## Runtime (18. Sep 2010)

Vielleicht liegts an der Rheienfolge?


----------



## Doc (18. Sep 2010)

Jetzt hab ich beide Buttons die Probleme machen auf setFocusable(false) gesetzt.
Jetzt ist einer von ihnen nicht mehr focusable, der andere aber immer noch.

Also das sieht für mich nach einem Java Problem aus.


----------



## Runtime (18. Sep 2010)

Und den Code kannst du wirklich nicht posten? Er würde einiges erleichtern.


----------



## Doc (18. Sep 2010)

Ich hab jetzt den Code umgebaut, um zu überprüfen ob es an der Reihenfolge liegt in der die Buttons geladen werden. Ist auch nicht das Problem.

zum Code:
Es macht glaub wenig Sinn ein ganzes GUI zu posten. Das sind echt viele Zeilen Code. Und was Probleme macht sind echt nur zwei Buttons, auf die der FocusListener anspringt, obwohl darauf eigentlich kein FocusListener funktionieren kann.

Hier der FocusListener:


```
FocusListener focus = new FocusListener() {
			  @Override
			  public void focusLost(FocusEvent e) {
				
				System.out.println("focus Lost in TextPane "+focusedString);
				}

			  @Override
			  public void focusGained(FocusEvent e) {
				focused = (JTextPane) e.getComponent();
				focusedString =	(String) e.getComponent().getName();
				
				System.out.println("focus Gained in TextPane "+focusedString);

			  }
			};
```


----------



## Runtime (18. Sep 2010)

Wichtiger wäre der Teil wo die Buttons erstellt werden.


----------



## Doc (18. Sep 2010)

Die Buttons werden direkt hintereinander erstellt, die können eigentlich keine Schwierigkeiten machen.

Der FocusListener kann doch garnicht auf Buttons zugreifen, oder seh ich da was falsch?

Was ich jetzt festgestellt habe:
Der Button bekommt den gleichen Focus nochmal, den der Focuslistener bereits hat. Also er wiederholt den Focus im Prinzip.


----------



## Runtime (18. Sep 2010)

Es sollte schon gehen.


----------



## Doc (18. Sep 2010)

Der erste Button verliert den Focus beim Klicken und bekommt ihn beim Loslassen wieder an der gleichen Position.

Der zweite Button verliert den Focus beim Klicken und bekommt ihn beim Loslassen an einer anderen Position (an der ersten).

Mit "Position" meine ich die Nummer des TextPanes. Ich hab mehrere in einem GridLayout angeordnet.

Und wie gesagt passiert das nur, wenn sich die Buttons selbst mit setEnabled(false) deaktivieren sollen


----------



## Runtime (19. Sep 2010)

Ich habs ausprobiert und der disablete Button bekommt nur dann den Focus, wenn alle anderen Componenten entweder nicht focusable oder disabled sind.


----------



## Doc (19. Sep 2010)

Also auf den Buttons hab ich unter anderem die Funktion, dass ich einige TextPanes entfocuse 
Klingt so als ob du das Problem wiederholen konntest.

Aber ein Bug ist es ja trotzdem.

Trotzdem, danke dir für deine Unterstützung!


Meine Idee ist nun, den FocusListener zu Beginn des Buttons zu deaktivieren und am Ende wieder zu starten. Geht das? Und wenn ja, wie?


----------



## Doc (19. Sep 2010)

Edit: Zu früh gefreut. Der Fehler tritt immer noch auf :-(

Der Button verliert beim Drücken wie es sein soll den Focus, aber beim Loslassen bekommt er wieder denselben.

UPDATE:
Hab nun den setEnabled Befehl ÜBER die Stelle gesetzt an der ich an den focusierbaren Elementen was verstelle und nun scheint es etwas besser zu tun. Ich muss zwar einen Button immernoch unsinnigerweise unfokusierbar machen, und es treten weniger Probleme im Progrmamverlauf auf, allerdings hab ich nicht alle wegbekommen. Der Fehler bleibt also bestehen ;( 

Durch den Programmablauf, also die Reihenfolge in der die Buttons gedrückt werden können, sollten jetzt aber keine Probleme mehr entstehen können.


----------



## Runtime (19. Sep 2010)

Ich verstehs nicht mehr..


----------



## diel2001 (19. Sep 2010)

Kann es vielleicht sein, dass der Button das erste Element auf dem JPanel ist und wenn das Panel den Focus bekommt,
der Button auch wieder den Focus bekommt ???


----------



## Doc (19. Sep 2010)

Das Panel darf gar keinen Focus bekommen.


----------



## Extremefall (19. Sep 2010)

Schreibe einmal den ganzen Code und markiere die Stelle, wo der Fehler ist. Das ist ziemlich unübersichtlich geworden.


----------

