Support for HTML

The use of HTML is supported by most Swing components. For example, it is possible to use HTML markup to create multiline and multifont labels:

JLabel label = new JLabel("<html>line 1<p><font color=blue size=+2>" 
                         + "big blue</font> line 2<p>line 3</html>");

There are a number of things to watch out for when taking advantage of Swing’s HTML support:

  • The text is interpreted as HTML only if the first six characters are <html> (case doesn’t matter).

  • The font of components using HTML may not match that of components that don’t.

  • Bad HTML may throw RuntimeExceptions, so test your code thoroughly. (Older SDKs are especially fragile in this respect. SDK 1.2 can’t even handle an unknown tag.)

  • There is no good way to determine if a particular component supports HTML programmatically.

  • XHTML-style self-closing tags (such as <br />) insert a spurious > character into the output, at least as of SDK 1.4.1.

  • SDKs prior to 1.3 are unable to size properly in the presence of <br> tags, so for maximum compatibility use <p> tags instead. Newer SDKs treat the two tags identically.

HTML support keeps improving with each release of Swing, but serious bugs remain. Slightly older releases are riddled with bugs in their HTML implementations. (Versions 1.1 and earlier don’t support HTML at all. The JLabel would be displayed as 77 characters of verbatim text, just like the java.awt.Label in Figure 4-6.)

A JLabel and a java.awt.Label displaying the same text

Figure 4-6. A JLabel and a java.awt.Label displaying the same text

As of SDK 1.4.1 the following components support HTML text:[2] JLabel, JButton, JToggleButton, JCheckBox, JRadioButton, JMenu, JMenuItem, JCheckBoxMenuItem, JRadioButtonMenuItem, JComboBox, JList, the tabs of JTabbedPane, JTable,[3] JTree, and JToolTip. (And, of course, JEditorPane was designed to support HTML from day one.)



[2] The list for 1.3 is the same, but with several more sizing problems. 1.2 does not support HTML with JToggleButton, JCheckBox, or JRadioButton.

[3] HTML works in table rows and in the table header, but as of SDK 1.4.1, neither is automatically resized if the HTML needs more vertical space than a single line of plain text. You might have to manually resize them.

Get Java Swing, 2nd Edition now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.