EditorPaneTest.java Source code

Java tutorial

Introduction

Here is the source code for EditorPaneTest.java

Source

/*
   This program is a part of the companion code for Core Java 8th ed.
   (http://horstmann.com/corejava)
    
   This program is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation, either version 3 of the License, or
   (at your option) any later version.
    
   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.
    
   You should have received a copy of the GNU General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.util.Stack;

import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.event.HyperlinkEvent;
import javax.swing.event.HyperlinkListener;

/**
 * This program demonstrates how to display HTML documents in an editor pane.
 * @version 1.03 2007-08-01
 * @author Cay Horstmann
 */
public class EditorPaneTest {
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                JFrame frame = new EditorPaneFrame();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setVisible(true);
            }
        });
    }
}

/**
 * This frame contains an editor pane, a text field and button to enter a URL and load a document,
 * and a Back button to return to a previously loaded document.
 */
class EditorPaneFrame extends JFrame {
    public EditorPaneFrame() {
        setTitle("EditorPaneTest");
        setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);

        final Stack<String> urlStack = new Stack<String>();
        final JEditorPane editorPane = new JEditorPane();
        final JTextField url = new JTextField(30);

        // set up hyperlink listener

        editorPane.setEditable(false);
        editorPane.addHyperlinkListener(new HyperlinkListener() {
            public void hyperlinkUpdate(HyperlinkEvent event) {
                if (event.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
                    try {
                        // remember URL for back button
                        urlStack.push(event.getURL().toString());
                        // show URL in text field
                        url.setText(event.getURL().toString());
                        editorPane.setPage(event.getURL());
                    } catch (IOException e) {
                        editorPane.setText("Exception: " + e);
                    }
                }
            }
        });

        // set up checkbox for toggling edit mode

        final JCheckBox editable = new JCheckBox();
        editable.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent event) {
                editorPane.setEditable(editable.isSelected());
            }
        });

        // set up load button for loading URL

        ActionListener listener = new ActionListener() {
            public void actionPerformed(ActionEvent event) {
                try {
                    // remember URL for back button
                    urlStack.push(url.getText());
                    editorPane.setPage(url.getText());
                } catch (IOException e) {
                    editorPane.setText("Exception: " + e);
                }
            }
        };

        JButton loadButton = new JButton("Load");
        loadButton.addActionListener(listener);
        url.addActionListener(listener);

        // set up back button and button action

        JButton backButton = new JButton("Back");
        backButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent event) {
                if (urlStack.size() <= 1)
                    return;
                try {
                    // get URL from back button
                    urlStack.pop();
                    // show URL in text field
                    String urlString = urlStack.peek();
                    url.setText(urlString);
                    editorPane.setPage(urlString);
                } catch (IOException e) {
                    editorPane.setText("Exception: " + e);
                }
            }
        });

        add(new JScrollPane(editorPane), BorderLayout.CENTER);

        // put all control components in a panel

        JPanel panel = new JPanel();
        panel.add(new JLabel("URL"));
        panel.add(url);
        panel.add(loadButton);
        panel.add(backButton);
        panel.add(new JLabel("Editable"));
        panel.add(editable);

        add(panel, BorderLayout.SOUTH);
    }

    private static final int DEFAULT_WIDTH = 600;
    private static final int DEFAULT_HEIGHT = 400;
}