2012-01-27 45 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 
       } 
      } 
     } 
    } 
相關問題