HyperlinkListener

本文介绍如何在Java Swing的JEditorPane组件中实现超链接监听,并根据不同链接触发不同的事件响应。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

在JEditorPane中引用HyperlinkListener

import java.awt.BorderLayout;
import java.io.File;
import java.io.IOException;

import javax.swing.JEditorPane;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;
import javax.swing.event.HyperlinkEvent;
import javax.swing.event.HyperlinkListener;

public class EditorPaneSample {
public static void main(String args[]) throws IOException {
JFrame f = new JFrame("JEditorPane Sample");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JEditorPane editor = new JEditorPane("text/html",
"<center><a herf=/"/">Three</a><center>");
editor.setEditable(false);

HyperlinkListener hyperlinkListener = new ActivatedHyperlinkListener(f,
editor);
editor.addHyperlinkListener(hyperlinkListener);

JScrollPane scrollPane = new JScrollPane(editor);
f.getContentPane().add(scrollPane, BorderLayout.CENTER);
f.setSize(300, 200);
f.setVisible(true);
}
}

class ActivatedHyperlinkListener implements HyperlinkListener {

JFrame frame;

JEditorPane editorPane;

public ActivatedHyperlinkListener(JFrame frame, JEditorPane editorPane) {
this.frame = frame;
this.editorPane = editorPane;
}

public void hyperlinkUpdate(HyperlinkEvent hyperlinkEvent) {
HyperlinkEvent.EventType type = hyperlinkEvent.getEventType();

if (type == HyperlinkEvent.EventType.ACTIVATED) {
Runnable runner = new Runnable() {
public void run() {
JFileChooser chooser = new JFileChooser(".");
chooser.setAcceptAllFileFilterUsed(false);

int status = chooser.showOpenDialog(editorPane);
if (status == JFileChooser.APPROVE_OPTION) {
File f = chooser.getSelectedFile();
System.out.println(f);
}
}
};
SwingUtilities.invokeLater(runner);
}
}
}

 

 

 

 

改进一下,不同连接触发不同事件:

import java.awt.BorderLayout;
import java.io.File;
import java.io.IOException;
import java.net.URL;

import javax.swing.JEditorPane;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;
import javax.swing.event.HyperlinkEvent;
import javax.swing.event.HyperlinkListener;

public class EditorPaneSample {
public static void main(String args[]) throws IOException {
JFrame f = new JFrame("JEditorPane Sample");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JEditorPane editor = new JEditorPane("text/html",
"<center><li><a herf=/"http://three/">Three</a></li><li>"
+ "<a herf=/"http://one/">One</a></li><center>);
editor.setEditable(false);

HyperlinkListener hyperlinkListener = new ActivatedHyperlinkListener(f,
editor);
editor.addHyperlinkListener(hyperlinkListener);

JScrollPane scrollPane = new JScrollPane(editor);
f.getContentPane().add(scrollPane, BorderLayout.CENTER);
f.setSize(300, 200);
f.setVisible(true);
}
}

class ActivatedHyperlinkListener implements HyperlinkListener {

JFrame frame;

JEditorPane editorPane;

public ActivatedHyperlinkListener(JFrame frame, JEditorPane editorPane) {
this.frame = frame;
this.editorPane = editorPane;
}

public void hyperlinkUpdate(HyperlinkEvent hyperlinkEvent) {
HyperlinkEvent.EventType type = hyperlinkEvent.getEventType();

final URL url = hyperlinkEvent.getURL();
if (type == HyperlinkEvent.EventType.ACTIVATED) {
if (url.toString().equals("http://one")) {
Runnable runner = new Runnable() {
public void run() {
JFileChooser chooser = new JFileChooser(".");
chooser.setAcceptAllFileFilterUsed(false);

int status = chooser.showOpenDialog(editorPane);
if (status == JFileChooser.APPROVE_OPTION) {
File f = chooser.getSelectedFile();
System.out.println(f);
}
}
};
SwingUtilities.invokeLater(runner);
} else if (url.toString().equals("http://three")) {
Runnable runner = new Runnable() {
public void run() {
JOptionPane.showMessageDialog(null, "three", null,
JOptionPane.INFORMATION_MESSAGE, null);
}
};
SwingUtilities.invokeLater(runner);
}
}
}
}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值