JEditorPane and the Swing HTML Package 2
/*
Core SWING Advanced Programming
By Kim Topley
ISBN: 0 13 083292 8
Publisher: Prentice Hall
*/
import java.awt.BorderLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.text.EditorKit;
public class EditorPaneExample2 extends JFrame {
public EditorPaneExample2() {
super("JEditorPane Example 2");
pane = new JEditorPane();
pane.setEditable(false); // Read-only
getContentPane().setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.gridwidth = 2;
c.gridheight = 1;
c.anchor = GridBagConstraints.CENTER;
c.fill = GridBagConstraints.BOTH;
c.weightx = 1.0;
c.weighty = 1.0;
c.gridx = 0;
c.gridy = 0;
c.insets = new Insets(2, 2, 2, 2);
getContentPane().add(new JScrollPane(pane), c);
// Build the panel of controls
JPanel upperPanel = new JPanel();
upperPanel.setLayout(new BorderLayout());
// Add a text area with a surrounding border
textArea = new JTextArea(5, 30);
JPanel textPanel = new JPanel();
textPanel.setLayout(new BorderLayout());
textPanel.setBorder(BorderFactory.createTitledBorder("Source Text"));
textPanel.add(new JScrollPane(textArea));
upperPanel.add(textPanel, "Center"); // Add the text panel
// Build a subpanel with two radio buttons to
// select document type and a button to install
// new text.
Box controlPanel = new Box(BoxLayout.Y_AXIS);
// Add the radio buttons
ButtonGroup group = new ButtonGroup();
plainButton = new JRadioButton("Plain Text");
htmlButton = new JRadioButton("HTML");
group.add(plainButton);
group.add(htmlButton);
controlPanel.add(plainButton);
controlPanel.add(htmlButton);
// Add a button to install the text
JButton installButton = new JButton("Install text");
controlPanel.add(installButton);
// Add glue to pad out extra space
controlPanel.add(Box.createVerticalGlue());
// Add the controls to the upper panel
// and the upper panel to the content pane
upperPanel.add(controlPanel, "East");
c.gridy = 1;
c.weighty = 0.0; // No vertical expansion
getContentPane().add(upperPanel, c);
// Add labels showing the current editor kit and document
c.gridy = 2;
c.gridwidth = 1;
c.weightx = 0.0;
c.fill = GridBagConstraints.NONE;
getContentPane().add(new JLabel("Document: ", JLabel.RIGHT), c);
c.gridy = 3;
getContentPane().add(new JLabel("Editor Kit:", JLabel.RIGHT), c);
docLabel = new JLabel("", JLabel.LEFT);
kitLabel = new JLabel("", JLabel.LEFT);
c.gridy = 2;
c.gridx = 1;
c.weightx = 1.0;
c.fill = GridBagConstraints.HORIZONTAL;
getContentPane().add(docLabel, c);
c.gridy = 3;
getContentPane().add(kitLabel, c);
// Add a listener to the button
installButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
// Get the text and install it in the JEditorPane
SwingUtilities.invokeLater(new Runnable() {
public void run() {
pane.setText(textArea.getText());
}
});
}
});
// Add listeners to the radio buttons
ActionListener radioButtonListener = new ActionListener() {
public void actionPerformed(ActionEvent evt) {
JRadioButton b = (JRadioButton) evt.getSource();
String type = ((b == plainButton) ? "text/plain" : "text/html");
final EditorKit kit = pane.getEditorKitForContentType(type);
SwingUtilities.invokeLater(new Runnable() {
public void run() {
pane.setEditorKit(kit);
}
});
}
};
// Listen to the properties of the editor pane
pane.addPropertyChangeListener(new PropertyChangeListener() {
public void propertyChange(PropertyChangeEvent evt) {
String prop = evt.getPropertyName();
if (prop.equals("document")) {
docLabel.setText(evt.getNewValue().getClass().getName());
} else if (prop.equals("editorKit")) {
kitLabel.setText(evt.getNewValue().getClass().getName());
}
}
});
plainButton.addActionListener(radioButtonListener);
htmlButton.addActionListener(radioButtonListener);
// Finally, start off by selecting plain text
SwingUtilities.invokeLater(new Runnable() {
public void run() {
plainButton.setSelected(true);
docLabel.setText(pane.getDocument().getClass().getName());
kitLabel.setText(pane.getEditorKit().getClass().getName());
}
});
}
public static void main(String[] args) {
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
} catch (Exception evt) {}
JFrame f = new EditorPaneExample2();
f.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent evt) {
System.exit(0);
}
});
f.setSize(500, 400);
f.setVisible(true);
}
private JEditorPane pane;
private JTextArea textArea;
private JRadioButton plainButton;
private JRadioButton htmlButton;
private JLabel docLabel;
private JLabel kitLabel;
}
Related examples in the same category