O'Reilly logo

Java Swing by Dave Wood, Marc Loy, Robert Eckstein

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

A Stylized Editor

We’ve now covered all the classes and interfaces related to the concept of document styles. The remainder of this chapter explores an in-depth example that shows how to create Styles and apply them to paragraphs in a document. This mini-word processor will have the following features:

  • User can define Styles, using a simple dialog box that allows attributes such as font size, line spacing, bold, and italics to be specified.

  • User can set the Style for the paragraph at the current cursor position.

  • User can modify a Style and see the changes reflected in all paragraphs using the modified Style.

This last item requires a bit of work. This is not trivial because the relationship between an Element and its Style is one-directional. That is, a Style has no knowledge of the Elements that refer to it. Therefore, when changes are made to a Style, the only way we can get the Elements to be redrawn with the new attributes is to keep track of which Elements use which Style. We’ll see one way to implement later.

The example consists of three classes: StyleFrame, StyleBox, and StylishDocument. StyleFrame is the main application frame. It contains a JTextPane for editing text and a JMenuBar that allows the user to create Styles, modify Styles, and set the Style for the paragraph at the current cursor position. The document used by the text pane is an instance of StylishDocument, an extension of DefaultStyledDocument that keeps track of which Elements use which Styles. Finally,

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required