2010-02-03 16 views
6

Necesito mostrar una información sobre herramientas arriba (o debajo :) de una celda cuando el usuario ingresa un valor incorrecto en ella (ver la imagen a continuación). Tengo información sobre herramientas, pero necesito un Punto para mostrarlo en la posición correcta, así que quiero obtener una posición de celda. ¿Sabes cómo conseguir esto?Mostrar una información sobre herramientas sobre una celda en una JTable

PERO, si tiene una mejor solución para realizar este comportamiento, estoy abierto a todas las proposiciones (especialmente por el hecho de que la información sobre herramientas no está vinculada con la celda/Jtable/Panel y si muevo/cerro/minimizo mi ventana la información sobre herramientas es la exhibición en la misma posición)

alt text http://img246.imageshack.us/img246/6756/errorpopup.png

Gracias, Damien

Respuesta

1

Trate getCellRect

+0

Yeah! Parece que esto puede responder a mi problema, gracias :) ¿Conoces una solución donde la información sobre herramientas está vinculada a la celda? – Damien

2

tienes an example of such feature i n la guía visual de componentes Swing.

Editar: De hecho, no es realmente una información sobre herramientas que necesita aquí, ya que la información sobre herramientas debe tener el cursor sobre la celda. Desea mostrar la información sobre herramientas incluso si el cursor está fuera de la celda, ¿verdad?

De todos modos, una solución alternativa es cambiar el fondo de la celda cuando el valor ingresado por el usuario no es válido (en naranja o rojo por ejemplo) y luego agregar una información sobre herramientas "real" (usando el enlace proporcionado) para darle al usuario un mensaje de error completo.

+0

Sí, no es una información sobre herramientas "real". Su solución podría estar bien. ¿Cómo puedo mostrar una información sobre herramientas (real) cuando el usuario ingresa un valor? (Estoy en el método setValueAt()) – Damien

6

Por favor, consulte a continuación fragmento de código, y obtendrá la solución

JTable table = new JTable() { 
    public Component prepareRenderer(TableCellRenderer renderer, int row, int column) { 
     Component c = super.prepareRenderer(renderer, row, column); 
     if (c instanceof JComponent) { 
      JComponent jc = (JComponent) c; 
      jc.setToolTipText(getValueAt(row, column).toString()); 
     } 
     return c; 
    } 
}; 

Si desea mostrar sólo la celda específica, todo lo que tiene que hacer es cambiar el parámetro de columna en los parametros de getValueAt (...) método para una columna específica que contiene esa celda

+0

Esto no funciona si se usa RowSorter, ya que los componentes no cambiarán el orden, pero los datos del modelo sí lo harán. –

+0

Funcionó muy bien para mí (sin RowSorter) – ricgeorge

0

utilizar el siguiente código para obtener el valor de la fila correcta si se utiliza RowSorter:

jc.setToolTipText(getValueAt(convertRowIndexToModel(row), column).toString()); 
+2

no - a) eso es establecer la misma información sobre herramientas para todas las células b) no resuelve la _above_ parte – kleopatra

2

sólo tiene que utilizar a continuación código mientras cr eació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 { 
        //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; 
      } 
     }; 
Cuestiones relacionadas