Java 单击后更改HTMLPanel中超链接的颜色
我在JDialog里有两个绝地武士。第一个窗格显示一个HTML文档,其中包含可以单击的链接列表。第二个显示用户单击链接时的URL 我想将单击的链接的颜色更改为黑色,这样用户就可以很容易地识别出上次单击的链接 我用了这个密码Java 单击后更改HTMLPanel中超链接的颜色,java,html,swing,jeditorpane,Java,Html,Swing,Jeditorpane,我在JDialog里有两个绝地武士。第一个窗格显示一个HTML文档,其中包含可以单击的链接列表。第二个显示用户单击链接时的URL 我想将单击的链接的颜色更改为黑色,这样用户就可以很容易地识别出上次单击的链接 我用了这个密码 @Override public void hyperlinkUpdate(HyperlinkEvent e) { if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) { if (
@Override
public void hyperlinkUpdate(HyperlinkEvent e) {
if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
if (e.getSource() instanceof JEditorPane) {
JEditorPane editor = ((JEditorPane) e.getSource());
editor.requestFocusInWindow();
editor.setSelectionStart(e.getSourceElement().getStartOffset());
editor.setSelectionEnd(e.getSourceElement().getEndOffset());
editor.setSelectedTextColor(Color.black);
editor.setSelectionColor(Color.white);
loadUrl(e.getUrl);
}
}
}
不幸的是,只有当绝地武士掌握了焦点时,这才起作用。因为我的JDialog中还有一个JTextField,我希望它永远不会失去焦点,所以我当前的解决方案不再有效
我尝试了提供的解决方案,但它们在我的情况下不起作用
编辑:不幸的是,使用CSS不起作用。这是显示在“我的电脑”窗格中的HTML代码
<html>
<head>
<style type="text/css">a:hover{color:red;}</style>
<title>title</title>
</head>
<body><ul><li><a href="file:/pathToFile.html">Path to File</a></li></ul>
</body>
</html>
但我仍然没有得到悬停效果
编辑2:发布我自己的问题解决方案作为答案。我仍然很想知道为什么CSS不起作用。你可以使用CSS功能
只要写下这段代码
@Override
public void hyperlinkUpdate(HyperlinkEvent e) {
if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
if (e.getSource() instanceof JEditorPane) {
JEditorPane editor = ((JEditorPane) e.getSource());
editor.requestFocusInWindow();
editor.setSelectionStart(e.getSourceElement().getStartOffset());
editor.setSelectionEnd(e.getSourceElement().getEndOffset());
editor.setSelectedTextColor(Color.black);
editor.setSelectionColor(Color.white);
loadUrl(e.getUrl);
}
}
}
HTML:
我的解决方案:
private final DefaultHighlightPainter highlightPainterLightGray
= new DefaultHighlightPainter(Color.LIGHT_GRAY);
@Override
public void hyperlinkUpdate(HyperlinkEvent e) {
if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
myJEditorPane.getHighlighter().removeAllHighlights();
myJEditorPane.getHighlighter().addHighlight(
e.getSourceElement().getStartOffset(),
e.getSourceElement().getEndOffset(), highlightPainterLightGray);
}
}
这不会像我最初想要的那样更改字体的颜色,而是更改背景色。这也给了用户一个很好的感觉,他最后点击了什么链接,这是我的目标
private final DefaultHighlightPainter highlightPainterLightGray
= new DefaultHighlightPainter(Color.LIGHT_GRAY);
@Override
public void hyperlinkUpdate(HyperlinkEvent e) {
if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
myJEditorPane.getHighlighter().removeAllHighlights();
myJEditorPane.getHighlighter().addHighlight(
e.getSourceElement().getStartOffset(),
e.getSourceElement().getEndOffset(), highlightPainterLightGray);
}
}