2011-11-30 25 views
7

¿cómo puedo agregar información sobre herramientas a las filas de JTable (Java Swing)? Estos tooltips deben contener los mismos valores de la fila relativa.Cómo agregar información sobre herramientas a las filas de JTable

Este es el código que utilicé en mi clase que extiende JTable. Se reemplaza el método "prepareRenderer", pero tengo celdas vacías, y se añade un texto de ayuda para cada célula individual dentro de la fila, ni una información sobre herramientas para toda la fila (que es lo que estoy buscando):

public Component prepareRenderer(TableCellRenderer renderer,int row, int col) { 
    Component comp = super.prepareRenderer(renderer, row, col); 
    JComponent jcomp = (JComponent)comp; 
    if (comp == jcomp) { 
     jcomp.setToolTipText((String)getValueAt(row, col)); 
    } 
    return comp; 
} 
+1

¿Necesita la comparación entre los y jcomp? Creo que siempre funcionará o nunca funcionará ... – BenCole

+0

"mismos valores de la fila relativa" ¿Qué significa eso? – kleopatra

Respuesta

14

se añade un texto de ayuda para cada célula individual dentro de la fila, ni una información sobre herramientas para toda la fila

Está cambiando la información de herramienta en función de la fila y la columna. Si solo quiere que la información sobre herramientas cambie por fila, solo verificaría el valor de la fila y me olvidaría del valor de la columna.

Otra forma de establecer la información sobre herramientas es anular el método getToolTipText(MouseEvent) de JTable. Luego puede usar el método rowAtPoint(...) de la tabla para obtener la fila y luego devolver la información sobre herramientas adecuada para la fila.

+1

¡Gracias, es casi perfecto! Lo único que falta es que la información sobre herramientas ahora dura unos segundos. Me gustaría mantenerlo visualizado hasta que el puntero del mouse se aleje. ¿Es eso posible? – Randomize

+3

Esto es controlado por 'ToolTipManager'. Puede cambiar el valor de descarte. – camickr

2

ver JComponent.setToolTipText() - el JComponent que desea en los datos por fila es no la tabla, sino más bien el procesador de datos de la celda, que tiene acceso a la configuración de un JComponent para cada celda procesada.

+0

Gracias por la respuesta. He editado mi pregunta con más información. – Randomize

5

Simplemente utilice el código siguiente al crear el 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 { 
        //comment row, exclude heading 
        if(rowIndex != 0){ 
         tip = getValueAt(rowIndex, colIndex).toString(); 
        } 
       } catch (RuntimeException e1) { 
        //catch null pointer exception if mouse is over an empty line 
       } 

       return tip; 
      } 
     }; 
0

rowIndex puede ser CERO.

cambio:

if(rowIndex != 0){ 
    tip = getValueAt(rowIndex, colIndex).toString(); 
} 

por:

if(rowIndex >= 0){ 
    tip = getValueAt(rowIndex, colIndex).toString(); 
} 
Cuestiones relacionadas