【问题标题】:How to show URLs as clickable in JEditorpane and allow them to opened in default browser?如何在 JEditorpane 中将 URL 显示为可点击并允许它们在默认浏览器中打开?
【发布时间】:2012-02-20 07:53:20
【问题描述】:

我有一个 Java 桌面应用程序,它在每个单元格中包含 URL + textJTable 中显示一些信息。由于我面临show and open URL in cell 的困难,所以我计划在JEditorpane 中显示单元格的内容。用户可以在JEditorpane 中打开单元格的内容,用户可以在其中轻松查看和编辑内容。

再次,我怎样才能使 URL 可点击并允许用户在 JEditorpane 的默认浏览器中打开 URL。

请注意:

  1. JEditorpane 窗格将包含文本和 URL,因此我只需要使 URL 可点击。
  2. JEditorpane 是可编辑的。用户可以编辑内容。

【问题讨论】:

标签: java swing url jeditorpane


【解决方案1】:
    javax.swing.JEditorPane jep = new javax.swing.JEditorPane();
    jep.setEditable(false);
    jep.setContentType("text/html");
    jep.addHyperlinkListener(new BrowserOpener());

    class BrowserOpener implements HyperlinkListener {    
        @Override
        public void hyperlinkUpdate(HyperlinkEvent event) {
            if (event.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
                try {
                    Desktop.getDesktop().browse(event.getURL().toURI());
                } catch (IOException | URISyntaxException ex) {
                    // TODO 
                }
            }
        }
    }

【讨论】:

    【解决方案2】:
    1. 实现HyperlinkListener。例如。在 JEditorPane 的 JavaDocs 中。
    2. 确保 JEP 显示 HTML,内容类型为 text/html,并且不可编辑。
    3. 在活动中,Desktop.browse(URI) 到 URL。

    【讨论】:

    • 感谢您的帮助,但我希望此功能具有可编辑的 JEP。请帮忙。
    【解决方案3】:

    您可能会考虑使用 JXTable 和 JXHyperlink(都在 SwingX project 中) - 它们支持渲染器中的超链接,以及由 Desktop 支持的 HyperlinkAction(@Andrew Thompson 提到的类)

    忘了提到默认为类 URI 安装了适当的渲染器,代码 sn-p 通过单击包含 URI 的单元格来触发适当的 DeskTop 操作:

        // quick model which returns URI class
        DefaultTableModel model = new DefaultTableModel(0, 1) {
    
            @Override
            public boolean isCellEditable(int row, int column) {
                return false;
            }
    
            @Override
            public Class<?> getColumnClass(int columnIndex) {
                return URI.class;
            }
    
        };
        // fill with supported uri types 
        model.addRow(new Object[]{new URI("mailto:contributor@java.net")});
        model.addRow(new Object[] {new URI("http://swingx.java.net")});
        model.addRow(new Object[] {new URI("http://stackoverflow.com/questions/9031371/how-to-show-url-as-a-click-able-url-in-jeditorpane-and-allow-them-to-open-in-def")});
        model.addRow(new Object[] {new URI("http://dummy.org")});
        // use in JXTable
        JXTable table = new JXTable(model);
        // that's it :-)
    

    附录

    忽略了你对 url + text 的要求——在 swingx 默认支持下,整个单元格都是可点击的,而不仅仅是 url 的字符串表示

    【讨论】:

      【解决方案4】:

      安德鲁的回答是正确的。可编辑JEditorPane 提示中的链接可在以下位置获得 Processing hyperlinks in editable JEditorPane with HTMLEditorKit.

      【讨论】:

      • 这比我的“在此处插入任何其他语言”的技能要好得多。 ;)
      猜你喜欢
      • 2012-02-20
      • 2020-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-23
      相关资源
      最近更新 更多