2011-11-30 14 views
7

Come posso aggiungere suggerimenti alle righe di JTable (Java Swing)? Queste descrizioni dovrebbero contenere gli stessi valori della riga relativa.Come aggiungere suggerimenti alle righe di JTable

Questo è il codice che ho usato nella mia classe che estende JTable. Esso sovrascrive il metodo "prepareRenderer", ma ho avuto le celle vuote, e si aggiunge un tooltip per ogni singola cella all'interno di fila, non uno tooltip per l'intera riga (che è quello che sto cercando):

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

Avete bisogno il confronto tra comp e jcomp? Penso che funzionerà sempre o non funzionerà mai ... – BenCole

+0

"stessi valori della riga relativa" Che cosa significa? – kleopatra

risposta

14

si aggiunge un suggerimento per ogni singola cella all'interno fila, non una descrizione per tutta la fila

State cambiando il suggerimento seconda riga e colonna. Se si desidera solo che il suggerimento cambi in base alla riga, quindi verificherei solo il valore della riga e dimenticherò il valore della colonna.

Un altro modo per impostare il suggerimento è sovrascrivere il metodo getToolTipText(MouseEvent) di JTable. Quindi è possibile utilizzare il metodo rowAtPoint(...) della tabella per ottenere la riga e quindi restituire il suggerimento appropriato per la riga.

+1

Grazie, è quasi perfetto! L'unica cosa che manca è che il tooltip ora dura pochi secondi. Vorrei tenerlo visualizzato fino a quando il puntatore del mouse non viene spostato. È possibile? – Randomize

+3

Questo è controllato da 'ToolTipManager'. Puoi cambiare il valore di allontanamento. – camickr

2

vedere JComponent.setToolTipText() - il JComponent che si desidera sui dati per riga è non la tabella, ma piuttosto il renderer di celle dei dati, che ha accesso alla configurazione di un componente J per ogni cella sottoposta a rendering.

+0

Grazie per la risposta. Ho modificato la mia domanda con maggiori informazioni. – Randomize

5

Basta usare sotto il codice durante la creazione dell'oggetto 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 può essere ZERO.

cambiamento:

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

da:

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