Wie kann die automatische HTML-Unterstützung von JLabel deaktiviert werden?

8

A Swing JLabel interpretiert jeden Text automatisch als HTML-Inhalt, wenn er mit & lt; html & gt; beginnt. Wenn der Inhalt dieses HTML ein Bild mit ungültiger URL ist, wird die gesamte GUI hängen bleiben, da die ImageFetche, die dieses Image laden soll, von einer NPE beendet wird.

Um dieses Problem zu reproduzieren, erstellen Sie einfach ein JLabel wie folgt

%Vor%

Ich weiß, dass es eine Clienteigenschaft gibt, die verhindert, dass JLabel HTML interpretiert. Aber JLabel ist die Standard-Renderer-Implementierung für viele Swing-Komponenten (wie JTree, JTable usw.), was dies zu einem Problem für fast jede Swing-Anwendung macht, die Benutzereingaben erlaubt. Anstatt also Tonnen von benutzerdefinierten Renderern zu implementieren, suche ich nach einer globalen Lösung, um die HTML-Interpretation zu deaktivieren.

    
tigger 27.08.2010, 12:49
quelle

3 Antworten

4

Es gibt einen Weg, wenn Sie Ihr eigenes Aussehen und Gefühl schaffen.
Ich bin mir nicht sicher, wie gut das funktioniert, aber es funktioniert. Nehmen wir an, Sie erweitern das "Classic Windows" L & amp; F. Sie brauchen mindestens 2 Klassen Eines ist das Look & amp; Feel selbst, nennen wir es WindowsClassicLookAndFeelExt. Sie müssen nur die Methode initClassDefaults überschreiben.

%Vor%

Sie benötigen außerdem eine WindowsLabelExtUI-Klasse, um alle JLabels zu verwalten und die Eigenschaft festzulegen:

%Vor%

Und schließlich eine Testklasse, wenn Sie das Thema als WindowsClassicLookAndFeelExt

festlegen %Vor%

Und Sie werden etwas wie

sehen

    
Pablo Grisafi 27.08.2010, 19:24
quelle
2

Für ein einfaches JLabel können Sie die JComponent-Methode

aufrufen %Vor%

auf dem Etikett, wo Sie HTML-Rendering deaktivieren möchten.

Referenz: Das HTML-Rendering in einem JLabel kann nicht deaktiviert werden

Für eine JTable, JTree oder JList müssen Sie einen benutzerdefinierten CellRenderer erstellen, der diese Eigenschaft definiert. Hier ist ein Beispiel (modifiziert von diesem Beispiel ), das einen benutzerdefinierten CellRenderer für JList .

%Vor%

Ich habe den Beispielcode aus der ListCellRenderer -Dokumentation verwendet als Ausgangspunkt für den benutzerdefinierten Listen-CellRenderer.

Wenn ich das Beispiel ausführe, können Sie sehen, dass der HTML-Code im ersten Listeneintrag gerendert und nicht interpretiert wird.

    
Bill the Lizard 27.08.2010 12:58
quelle
0

Hängen ist wahrscheinlich das kleinste unangenehme Verhalten. Aus diesem Grund ist Datenvalidierung sehr wichtig. Lassen Sie die Benutzer einfach nicht so etwas eingeben.

    
Devon_C_Miller 27.08.2010 14:51
quelle

Tags und Links