Use HTML and CSS in Text Components #52
Chapter 7, Text
This looks amusing and, when you type, the new text is indeed backward.
But the novelty wears off quickly; messing with the display screws up the
drawing of the caret and text highlighting, along with the handling of mouse
clicks to set the insert point. In playing around with
, we found
that we hosed word wrap, too, so we were stuck on the top line.
So, it’s a cute trick, but let’s reserve it for labels, OK?
H A C K
Use HTML and CSS in Text Components Hack #52
Spruce up your plain JLabels and buttons using HTML and CSS effects, such
as underlines, color, and even embedded tables.
You may know that you can display HTML using a subclass of
but did you also know that Swing supports simple HTML and CSS in virtu-
ally every text component? As long as you can trick it into showing it as
HTML instead of the markup, you can do some pretty nifty things.
Here’s the Trick
Every text component in Swing can display HTML, but the component
needs to know that the text is HTML, rather than a string that just happens
to contain a bunch of angle brackets. Since there is no
method on JTextComponent, you have to resort to being a little trickier. If the
string passed to the component’s constructor (or
setText( )) method starts
<html>, then the component will switch to HTML mode. Here is a
JButton b1a = new JButton("<html><i>my button</i>");
This code will produce a button that looks like Figure 7-11.
You don’t need to match the
<html> with an </html> tag at the end. Swing’s
HTML parser is pretty tolerant of malformed HTML, so for simple things
you can just type whatever is shortest. The mode can only be set once, so if
you put plain text into the component first and then HTML later, it will still
be in plain text mode. You should note that slower computers will exhibit a
noticeable delay the first time a component is shown with HTML. This is
because Swing has to load up all of the
javax.swing.text.html classes; how-
ever, they are cached for any further instances.
Figure 7-11. Italic text