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
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
...
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.
deffinetly no ... –
* "deffinetly no" * Mi chiedo se @deporter capisce quel commento. Sono sicuro di no. :( –
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
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;
}
};
In realtà, penso che sia più efficiente della soluzione accettata. –
Questo potrebbe non funzionare quando ordiniamo la tabella in base ad alcune colonne. –
Utilizzare 'getRowSorter(). ConvertRowIndexToModel (rowIndex)' e 'getRowSorter(). ConvertRowIndexToModel (rowIndex)' per ottenere la riga esatta dal modello. –
Non è possibile chiamare super.getTableCellRendererComponent. – codenamezero
@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'? –