2011-05-10 43 views
1

我有一個JTable,其中一列偶爾會有相當數量的文本。我們正在使用的算法將每一行的高度擴展到最高的單元格。問題是對於長文本單元格,我們得到「胖」行。JTable單元格 - 處理長文本

它看起來是這樣的:

 
============================= 
| Col1 | Col2 | This is some| 
|  |  | very long | 
|  |  | text!  | 
============================= 

我已經考慮了幾個解決方案:

  • 剪貼文本,添加鼠標監聽「擴大」的剪輯文本
  • 剪輯文本並添加工具提示或對話框以顯示額外內容

誰知道任何解決此問題的庫?我願意使用其他技術......我不相信我的解決方案是最好的。

在此先感謝!

回答

5

我只是使用工具提示。

您可以覆蓋的JTable的getToolTipText(()方法來做到這一點。

JTable table = new JTable(...) 
{ 
    public String getToolTipText(MouseEvent e) 
    { 
     int row = rowAtPoint(e.getPoint()); 
     int column = columnAtPoint(e.getPoint()); 

     Object value = getValueAt(row, column); 
     return value == null ? null : value.toString(); 
    } 
}; 

或者,如果其只對某些列,您可以使用渲染器來設置工具提示文本。見Specifying Tool Tips for Cells

+0

我只關心這種技術是它使複製表內容更令人沮喪。如果Swing具有像Eclipse一樣的「可鎖定」工具提示(我不知道它們叫做什麼)(例如,當您懸停在javadoc上),那將會很好。 – javamonkey79 2011-05-10 15:40:03

+1

我不確定複印問題是什麼。無論如何,表格不支持複製部分單元格。所以即使對於完全可見的文本,也不能選擇和複製幾個字符。你的問題不是從單元格複製文本。如果這是您真正的要求,那麼您需要顯示某種類型的自定義彈出窗口,以便在文本組件中顯示與渲染器相對的文本,以便您可以選擇並複製文本。 – camickr 2011-05-10 15:45:44

+0

不夠公平,我也沒有意識到複製行對模型的影響比渲染單元更多 - 我的擺動概念有點生疏,對不起。 – javamonkey79 2011-05-10 17:14:01

1

我花了一段時間才知道如何在Netbeans上顯示工具提示,但你的回答非常有幫助 這裏是在netbeans GUI Builder上實現的...... 右鍵點擊你的Jtable->自定義代碼 選擇「自定義創建「所在的新」javax.swing.JTable();「代碼是在分號之前;添加下面答案的代碼...看起來像這樣:

YourTable = new javax.swing.JTable(){ 
    //add tooltip to display the full cell text when not displayed 
    public String getToolTipText(MouseEvent e) 
    { 
     int row = rowAtPoint(e.getPoint()); 
     int column = columnAtPoint(e.getPoint()); 

     Object value = getValueAt(row, column); 
     return value == null ? null : value.toString(); 
    } 
} 
;