我在JDialog中有两个JEditorPanes。第一个JEditorPane显示一个HTML文档,其中包含可以单击的链接列表。当用户单击链接时,第二个显示URL。
我想将单击的链接的颜色更改为黑色,以便用户轻松识别他最后单击的链接。
我使用了这段代码
@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);
}
}
}
遗憾的是,此仅在 JEditorPane具有 焦点时有效。因为我的JDialog中也有一个JTextField,所以我不想失去焦点,所以当前的解决方案不再起作用。
我尝试了here提供的解决方案,但在我的情况下它们不起作用。
编辑:不幸的是,使用CSS无效。这是我的JEditorPane
中显示的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为什么不起作用。
答案 0 :(得分:1)
您可以使用 CSS 功能 只需编写这段代码
HTML:
DEVICE_LOCAL|HOST_VISIBLE|HOST_CACHED
CSS:
<a href="#" > something </a>
答案 1 :(得分:0)
我的解决方案:
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);
}
}
这不会像我最初想要的那样改变字体的颜色,但是会改变背景颜色。这也使用户对他最后单击的链接有很好的感觉,这就是我的目标。