2012-02-27 25 views

Respuesta

21

Supongo que no escribió un CellRenderer personalizado para la ruta, pero simplemente use el DefaultTableCellRenderer. Debe subclasificar el DefaultTableCellRenderer y configurar la información sobre herramientas en el getTableCellRendererComponent. Luego configura el renderizador para la columna.

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

No puede llamar a super.getTableCellRendererComponent. – codenamezero

+2

@codenamezero ¿Por qué no? ¿Sabía que en el código de ejemplo he subclasificado 'DefaultTableCellRenderer' que tiene el método de una manera no abstracta y es él mismo un' JLabel'? –

0

Dice que almacena una ruta de acceso absoluta en una celda. Probablemente esté utilizando un JLabel para establecer la cadena de ruta absoluta . Suponga que tiene una etiqueta en su celular, usar etiquetas HTML para expresar el contenido de información de herramienta:

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

setToolTipText() se puede utilizar para algunos otros componentes Swing si está utilizando algo que no sea JLabel.

+0

valiera nop ... –

+1

* "valiera nop" * Me pregunto si entiende que @deporter comentario. Seguro que no. :( –

+3

por favor, sea un poco más preciso: _tiene una etiqueta en su celda_ podría ser engañoso (no debería haber componentes en la celda, nunca) En su lugar, es una etiqueta proporcionada por un procesador como ... bien .. componente de representación: -) – kleopatra

25

sólo tiene que utilizar a continuación del código durante la creación del objeto 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

En realidad, creo que es más eficiente que la solución aceptada. –

+0

Esto puede no funcionar cuando ordenamos la tabla en función de alguna columna. –

+0

Utilice 'getRowSorter(). ConvertRowIndexToModel (rowIndex)' y 'getRowSorter(). ConvertRowIndexToModel (rowIndex)' para obtener la fila exacta del modelo. –

Cuestiones relacionadas