4.3 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.)

Figure 4-6. A JLabel and a java.awt.Label displaying the same text
figs/swng2.0406.gif

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.



Java Swing
Graphic Java 2: Mastering the Jfc, By Geary, 3Rd Edition, Volume 2: Swing
ISBN: 0130796670
EAN: 2147483647
Year: 2001
Pages: 289
Authors: David Geary

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net