单击

时间:2018-07-23 13:37:40

标签: java html swing jeditorpane

我在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为什么不起作用。

2 个答案:

答案 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);
  }
}

这不会像我最初想要的那样改变字体的颜色,但是会改变背景颜色。这也使用户对他最后单击的链接有很好的感觉,这就是我的目标。