如何在JEditorpane中将URL显示为可点击并允许它们在默认浏览器中打开?

Ash*_*oli 0 java url swing jeditorpane

我有Java桌面应用程序,显示每个单元格JTable中包含的信息URL + text.因为我在单元格中显示和打开URL时遇到困难所以我计划显示单元格的内容JEditorpane.用户可以JEditorpane在用户可以轻松查看和编辑内容的位置打开单元格内容.

同样,我如何才能使URL可点击并允许用户在默认浏览器中打开URL JEditorpane.

请注意:

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

And*_*son 10

  1. 实施一个HyperlinkListener.用于JavaDocs的EG JEditorPane.
  2. 确保JEP显示HTML,内容类型为text/html,且不可编辑.
  3. 在事件上,Desktop.browse(URI)到URL.


Sta*_*avL 8

安德鲁的回答是正确的.可编辑JEditorPane提示中的链接可在 处理带有HTMLEditorKit的可编辑JEditorPane中的超链接处获得.


kle*_*tra 5

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

忘了提到默认情况下为类URI安装了相应的渲染器,这是一个代码片段,它通过单击包含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 :-)
Run Code Online (Sandbox Code Playgroud)

附录

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