Swing JCheckBox, setEnabled(false) und HTML Text Problem

Grizzly

Top Contributor
Hallo zusammen,

ich bin gerade über ein interessantes Problem gestolpert, dass mir so vorher noch nicht aufgefallen ist:
Ich habe eine JCheckBox, welche ich mit setEnabled(false) deaktiviere. Dann setze ich eine Beschriftung als HTML Text. Doch irgendwie stimmen dann die Farben nicht mehr. Normalerweise ist eine deaktivierte JCheckBox ausgegraut. In meinem Fall sieht sie aber ganz normal aus (Text sowie das Kästchen davor) - zumindest die Farben betreffend. Sie ist aber deaktiviert sprich reagiert nicht auf Eingaben des Benutzers. Vielleicht ein Bug?

Java:
	private JCheckBox getDruckBonVerbuchenStaplerterminalCheckBox() {
		if (this.druckBonVerbuchenStaplerterminalCheckBox == null) {
			this.druckBonVerbuchenStaplerterminalCheckBox = new JCheckBox();
			this.druckBonVerbuchenStaplerterminalCheckBox.setText(
					TextKit.toHTMLText("Bon beim Verbuchen im Staplerterminal "
							+ "drucken"));
			this.druckBonVerbuchenStaplerterminalCheckBox.setEnabled(false);
		}
		return this.druckBonVerbuchenStaplerterminalCheckBox;
	}

Java:
	public static String toHTMLText(final String text) {
		StringBuffer sb = new StringBuffer("<html><head></head><body>");
		String[] lines;
		
		if (text == null) {
			throw new IllegalArgumentException("Argument text is null.");
		}
		lines = text.split("\\n", -1);
		for (int index = 0; index < lines.length; index++) {
			sb.append(lines[index]);
			if (index < lines.length - 1) {
				sb.append("<br>");
			}
		}
		sb.append("</body></html>");
		return sb.toString();
	}

Bei den ersten 3 Checkboxen ist die Beschriftung ganz normal gesetzt. Die letzte Checkbox hat HTML als Beschriftung, damit der automatische Umbruch funktioniert. Wie man gut erkennen kann, ist die Farbe anders.

attachment.php
 

Anhänge

  • Screenshot.png
    Screenshot.png
    3,8 KB · Aufrufe: 62
Vllt liegt es daran, dass das die HTML Standard-Farbe für Schrift ist.
Du könntest einen zusätzlichen boolean Parameter einrichten, um toHTMLText zu sagen, ob die Box enabled ist.
Dann muss der Text aber jedes mal neu gesetzt werden, wenn das Kästchen disabled/enabled wird.
Außerdem weiß ich nicht, ob #999999 für alle LAFs korrekt ist. Aber ob man die Farbe irgendwo abfragen kann weiß ich nicht.

Java:
String color = "";
if(!enabled)
	color = "<style>body{color: #999999;}</style>";
StringBuffer sb = new StringBuffer("<html><head> " + color + "</head><body>");
 
Okay, das mit der Farbe wäre ja noch herauszubekommen. Ich könnte ja einfach die anderen deaktivierten JCheckBox Komponenten befragen. Aber dann wäre das Kästchen vorne vermutlich immer noch in einer anderen Farbe, da dieses ja eine Grafik (bzw. Icon) ist und normalerweise mit dem Text in keinerlei Verbindung stehen sollte.
 
Ich kann dir glaube ich nicht mehr folgen.

[...]

Ich kann keinen Unterschied zwischen den Kästchen erkennen :bahnhof:

Ups 😳 , auf meinem Monitor sah es so aus, als wäre auch das Kästchen in einer anderen Farbe. Muss wohl dort die unterschiedliche Schriftfarbe so gewirkt haben. Habe es gerade nochmal im Grafikprogramm in der Vergrößerung angeschaut und - Du hast recht - die Farbe ist absolut identisch.

Das war eigentlich auch mein Hauptproblem, dass sich damit in Luft aufgelöst hat. 😉
 
Die Farbe bekommt man übrigens folgendermaßen:
Java:
Color color = UIManager.getDefaults().getColor("CheckBox.disabledText");
Muss man dann halt noch in einen Hex Wert umwandeln und bspw. über einen <span>-Tag einbinden.
Java:
TextKit.toHTMLText("<span style=\"" + this.getHexColor() + "\">Bon beim Verbuchen im Staplerterminal drucken</span>"));
Wobei die Methode getHexColor() einfach den Farbwert als Hexwert zurück gibt, sprich bspw.
Code:
#000000
.
 

Neue Themen


Zurück
Oben