2012-02-27 96 views

回答

21

我假定您没有为该路径编写自定义CellRenderer,而只是使用DefaultTableCellRenderer。您应该子类DefaultTableCellRenderer并在getTableCellRendererComponent中设置工具提示。然后设置列的渲染器。

class PathCellRenderer extends DefaultTableCellRenderer { 
    public Component getTableCellRendererComponent(
         JTable table, Object value, 
         boolean isSelected, boolean hasFocus, 
         int row, int column) { 
     JLabel c = (JLabel)super.getTableCellRendererComponent(// params from above); 
     // This... 
     String pathValue = <getYourPathValue>; // Could be value.toString() 
     c.setToolTipText(pathValue); 
     // ...OR this probably works in your case: 
     c.setToolTipText(c.getText()); 
     return c; 
    } 
} 

... 
pathColumn.setCellRenderer(new PathCellRenderer()); // If your path is of specific class (e.g. java.io.File) you could set the renderer for that type 
... 
+0

你不能调用super.getTableCellRendererComponent。 – codenamezero 2017-01-02 18:19:47

+2

@codenamezero为什么不呢?你知道在示例代码中,我将'DefaultTableCellRenderer'分类为非抽象方式的方法,本身就是'JLabel'? – 2017-01-02 21:43:17

0

你说你在一个单元格中存储一个绝对路径。您可能正在使用JLabel来设置绝对路径字符串。假设您在单元格有一个标签,使用HTML标签表达提示内容:

JLabel label = new JLabel("Bla bla"); 
label.setToolTipText("<html><p>information about cell</p></html>"); 

setToolTipText()可以,如果你使用的不是JLabel的其他东西可用于其他一些Swing组件。

+0

deffinetly nope ... – 2012-02-27 15:07:58

+1

*“deffinetly nope”*我想知道@deporter是否理解该评论。我当然不知道。 :( – 2012-02-27 15:11:53

+3

请更精确一点:_在你的cell_中有一个标签可能会引起误解(在单元格中不应该有组件),而是一个由渲染器提供的标签。 ) – kleopatra 2012-02-27 15:56:01

25

只需使用下面的代码而创建的JTable对象。

JTable auditTable = new JTable(){ 

      //Implement table cell tool tips.   
      public String getToolTipText(MouseEvent e) { 
       String tip = null; 
       java.awt.Point p = e.getPoint(); 
       int rowIndex = rowAtPoint(p); 
       int colIndex = columnAtPoint(p); 

       try { 
        tip = getValueAt(rowIndex, colIndex).toString(); 
       } catch (RuntimeException e1) { 
        //catch null pointer exception if mouse is over an empty line 
       } 

       return tip; 
      } 
     }; 
+0

实际上,我认为它比接受的解决方案更有效率。 – 2014-03-03 21:30:11

+0

当我们根据某一列对表格进行排序时,这可能不起作用。 – 2016-11-18 10:55:35

+0

使用'getRowSorter()。convertRowIndexToModel(rowIndex)'和'getRowSorter()。convertRowIndexToModel(rowIndex)'从模型中获取确切的行。 – 2016-11-18 13:34:42

相关问题