2012-02-27 18 views
10

Ho una tabella in cui ogni riga rappresenta un'immagine. Nella colonna Percorso conservo il suo percorso assoluto. La stringa è piuttosto lunga, mi piacerebbe che quando si passa il mouse sopra la cella specifica, dovrebbe apparire un suggerimento vicino al mouse contenente le informazioni dalla cella.Come aggiungere un suggerimento a una cella in un jolly?

risposta

21

Suppongo che non abbiate scritto un'abitudine CellRenderer per il percorso, ma semplicemente utilizzare lo DefaultTableCellRenderer. È necessario creare una sottoclasse di DefaultTableCellRenderer e impostare il suggerimento in getTableCellRendererComponent. Quindi imposta il renderer per la colonna.

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

Non è possibile chiamare super.getTableCellRendererComponent. – codenamezero

+2

@codenamezero Perché no? Sei consapevole che nel codice di esempio ho sottotitolato 'DefaultTableCellRenderer' che ha il metodo in una maniera non astratta ed è esso stesso un' JLabel'? –

0

Si dice di memorizzare un percorso assoluto in una cella. Probabilmente stai usando un JLabel per impostare la stringa di percorso assoluta. Supponiamo di avere un etichetta nel vostro cellulare, utilizzare i tag HTML per esprimere contenuti tooltip:

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

setToolTipText() possono essere utilizzati per alcuni altri componenti Swing se si utilizza qualcosa di diverso JLabel.

+0

deffinetly no ... –

+1

* "deffinetly no" * Mi chiedo se @deporter capisce quel commento. Sono sicuro di no. :( –

+3

per favore un po 'più preciso: _have un'etichetta nella tua cella_ potrebbe essere fuorviante (non ci dovrebbero essere componenti in cella, mai) Invece è un'etichetta fornita da un renderer come ... beh .. componente di rendering: -) – kleopatra

25

Basta utilizzare il codice qui sotto, mentre la 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 { 
        tip = getValueAt(rowIndex, colIndex).toString(); 
       } catch (RuntimeException e1) { 
        //catch null pointer exception if mouse is over an empty line 
       } 

       return tip; 
      } 
     }; 
+0

In realtà, penso che sia più efficiente della soluzione accettata. –

+0

Questo potrebbe non funzionare quando ordiniamo la tabella in base ad alcune colonne. –

+0

Utilizzare 'getRowSorter(). ConvertRowIndexToModel (rowIndex)' e 'getRowSorter(). ConvertRowIndexToModel (rowIndex)' per ottenere la riga esatta dal modello. –