简体   繁体   中英

Display clickable HTML links in JEditorPane

I have done some Googling, and all the methods do achieving clickable links in html didn't have much explanation on how they worked(at least not enough for me to understand). Anyone willing to elaborate a bit more?

My code:

import javax.imageio.ImageIO;
import javax.swing.*;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import java.net.*;

public class WebBrowser extends JFrame {
    public JPanel
        address_panel, window_panel;

    public JLabel
        address_label;

    public JTextField
        address_tf;

    public JEditorPane
        window_pane;

    public JScrollPane
        window_scroll;

    public JButton
        address_b;

    private Go go = new Go();

    public WebBrowser() throws IOException {
        try {
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
        } catch (ClassNotFoundException e1) {
            e1.printStackTrace();
        } catch (InstantiationException e1) {
            e1.printStackTrace();
        } catch (IllegalAccessException e1) {
            e1.printStackTrace();
        } catch (UnsupportedLookAndFeelException e1) {
            e1.printStackTrace();
        }
        Image image = null;
        try {
            image = ImageIO.read(new File("images/icon.gif"));
        } catch (IOException e) {
            e.printStackTrace();
        }
        address_label = new JLabel(" address: ", SwingConstants.CENTER);
        address_tf = new JTextField("");
        address_tf.addActionListener(go);
        address_b = new JButton("Go");
        address_b.addActionListener(go);

        window_pane = new JEditorPane("http://(server):(port)/");
        window_pane.setContentType("text/html");
        window_pane.setEditable(false);

        address_panel = new JPanel(new BorderLayout());
        window_panel = new JPanel(new BorderLayout());

        address_panel.add(address_label, BorderLayout.WEST);
        address_panel.add(address_tf, BorderLayout.CENTER);
        address_panel.add(address_b, BorderLayout.EAST);

        window_scroll = new JScrollPane(window_pane);
        window_panel.add(window_scroll);

        Container pane = getContentPane();
        pane.setLayout(new BorderLayout());

        pane.add(address_panel, BorderLayout.NORTH);
        pane.add(window_panel, BorderLayout.CENTER);

        setIconImage(image);
        setTitle("web browser");
        setSize(800,600);
        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);

    }

    public class Go implements ActionListener{

        public void actionPerformed(ActionEvent ae){

            try {

                window_pane.setPage("http://(server):(port)/"+address_tf.getText());

            } catch (MalformedURLException e) {
                window_pane.setText("MalformedURLException: " + e);
            } catch (IOException e) {              
                window_pane.setText("IOException: " + e);
            }

        }

    }

}

Thanks in advance(Feel free to point out anything that can be better in my code)

Airis

You need to add a HyperlinkListener , not ActionListener .

See tutorial here .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM