2010-02-03 14 views
6

Devo mostrare un suggerimento sopra (o sotto :) una cella quando l'utente inserisce un valore errato in essa (vedi l'immagine sotto). Ho un suggerimento, ma ho bisogno di un punto per visualizzarlo nella posizione giusta, quindi voglio ottenere una posizione di cella. Sai come ottenere questo?Mostra un suggerimento sopra una cella in una JTable

MA, se hai una soluzione migliore per realizzare questo comportamento, sono aperto a tutte le proposte (soprattutto per il fatto che il suggerimento non è vincolante con la cella/Jtable/Panel e se mi muovo/chiudo/minino la mia finestra il tooltip è visualizzazione nella stessa posizione)

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

Grazie, Damien

risposta

1

Prova getCellRect

+0

Sì! Sembra che questo possa rispondere al mio problema, grazie :) Conosci una soluzione in cui il suggerimento è collegato alla cella? – Damien

2

Hai an example of such feature i n la guida visiva dei componenti di Swing.

Modifica: In realtà, non è proprio un tooltip di cui avete bisogno qui, poiché il suggerimento deve avere il cursore posizionato sulla cella. Vuoi visualizzare il suggerimento anche se il cursore si trova all'esterno della cella, giusto?

In ogni caso, una soluzione alternativa è modificare lo sfondo della cella quando il valore immesso dall'utente non è valido (in arancione o rosso, ad esempio), quindi aggiungere un suggerimento "reale" (utilizzando il collegamento fornito) per dare all'utente un messaggio di errore completo.

+0

Sì, non è un suggerimento "reale". La tua soluzione potrebbe andare bene. Come faccio a mostrare un suggerimento (reale) quando l'utente inserisce un valore? (Sono nel metodo setValueAt()) – Damien

6

prega di fare riferimento al di sotto frammento di codice, e si otterrà la soluzione

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; 
    } 
}; 

Se si desidera visualizzare solo la cella specifica, tutto ciò che dovete fare è cambiare il parametro di colonna nelle params di getValueAt (... metodo per una specifica colonna che contiene la cella

+0

Questo non funziona se si utilizza RowSorter, poiché i componenti non cambieranno ordine, ma i dati del modello lo faranno. –

+0

Ha funzionato molto bene per me (senza RowSorter) – ricgeorge

0

utilizzare il seguente codice per ottenere il valore per la riga corretta se si utilizza RowSorter):

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

no - a) che sta impostando lo stesso suggerimento per tutte le celle b) non risolve la parte _above_ – kleopatra

2

Solo utilizzare sotto codice durante cr creazione di oggetti 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; 
      } 
     }; 
Problemi correlati