setEnabled(false); Problem

Doc

Aktives Mitglied
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.
 
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.
 
Zuletzt bearbeitet:
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!
 
Zuletzt bearbeitet:
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.
 
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
 
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.
 
Zuletzt bearbeitet:
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?
 
Zuletzt bearbeitet:
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.
 
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.
 
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:

Java:
	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);

			  }
			};
 
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.
 
Zuletzt bearbeitet:
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
 
Zuletzt bearbeitet:
Ich habs ausprobiert und der disablete Button bekommt nur dann den Focus, wenn alle anderen Componenten entweder nicht focusable oder disabled sind.
 
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?
 
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.
 
Zuletzt bearbeitet:
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 ???
 

Neue Themen


Zurück
Oben