Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 单击后更改HTMLPanel中超链接的颜色_Java_Html_Swing_Jeditorpane - Fatal编程技术网

Java 单击后更改HTMLPanel中超链接的颜色

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 (

我在JDialog里有两个绝地武士。第一个窗格显示一个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);
      }
    }
  }
不幸的是,只有当绝地武士掌握了焦点时,这才起作用。因为我的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);
  }
}