2012-01-27 68 views
0

我有一个显示在包含在每个单元URL + text一个JTable一些信息的Java桌面应用程序。由于我面临的难题是show and open URL in cell,所以我打算在JEditorpane中显示单元格的内容。用户可以打开JEditorpane中的单元格内容,用户可以轻松查看和编辑内容。如何在JEditorpane中显示可点击的URL并允许它们在默认浏览器中打开?

再怎么可以让我只URL点击的,并允许用户在默认浏览器中打开JEditorpane URL。

请注意:

  1. JEditorpane窗格将包含文字和网址,所以我需要做只是URL点击能。
  2. JEditorpane编辑。用户可以编辑内容。
+1

博尔更好地帮助越早请张贴http://sscce.org/demonstate您的问题 – mKorbel 2012-01-27 09:43:24

+0

的可能重复[如何显示URL,如表一点击的网址,并允许他们在默认浏览器中打开?](http://stackoverflow.com/questions/9029514/how-to-show- url-as-a-click-able-url-in-table-and-allow-them-to-open-in-default-b) – trashgod 2012-01-27 12:20:30

回答

10
  1. 执行HyperlinkListener。例如。在JavaDoc中为JEditorPane
  2. 确保JEP正在显示的HTML,具有text/html的内容类型,并且是不可编辑。
  3. 在事件Desktop.browse(URI)到URL。
+0

感谢您的帮助,但我希望此功能具有可编辑的JEP。请帮忙。 – 2012-01-27 09:54:23

+1

MOre [here](http://stackoverflow.com/a/9029598/230513)。 – trashgod 2012-01-27 12:21:30

5

你可能会考虑使用JXTable和JXHyperlink(无论是在SwingX project) - 他们支持超链接中渲染,完整的HyperlinkAction由桌面(由@Andrew汤普森提到的类)的支持

忘了提,适当的渲染器被默认为类URI,一个代码段,其通过点击到含有URI的细胞触发相应的桌面行动出关闭盒安装:

// 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:[email protected]")}); 
    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 :-) 

补遗

忽视了你的网址+文字的要求 - 在swingx默认支持,整个小区是可点击,不仅URL的字符串表示

0
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 
       } 
      } 
     } 
    } 
相关问题