View Full Version : [JAVA] jtable colorare le celle
Qualcuno sà dirmi se è possibile colorare le singole celle di una jtable,a colorare le colonne arrivo ma le singole celle?:muro: :muro:
Semplicissimo...devi creare una classe che estenda TableCellRenderer e ridefinire il metodo
public Component getTableCellRendererComponent(
JTable table, Object value,
boolean isSelected, boolean hasFocus,
int row, int column)
testando quell row e quel column che sono le coordinate delle celle puoi fare della relativa cella quello che vuoi...colorarla, dargli un certo Font, un certo tooltip...
MioTableCellRenderer renderer = new MioiTableCellRenderer(" );
miaTabella.setCellRenderer(renderer);
Ah dimenticavo...semplice per me :D
Le Table sono parecchio complesse... studiati:How Use Tables (http://java.sun.com/docs/books/tutorial/uiswing/components/table.html)
Grazie per l'aiuto,ho fatto come hai detto,ho creato la classe
che implementa l'interfaccia TableCellRenderer,ma il metodo setCellRenderer(.....) non c'è nel mio jdk,uso 1.4.2,come posso fare a fargli utilizzare la classe di renderizzazione?:muro:
Ho cercato un metodo equivalente ma l'unico che ho trovato è prepareRenderer(TableCellRenderer renderer,int row,int column) l'ho provato ma non và :rolleyes:
Quel metodo è un metodo di TableColumn, non di JTable,
http://java.sun.com/docs/books/tutorial/uiswing/components/table.html#renderer
ciao.
Originariamente inviato da anx721
Quel metodo è un metodo di TableColumn, non di JTable,
http://java.sun.com/docs/books/tutorial/uiswing/components/table.html#renderer
ciao. opsss...hai perfettamente ragione! Devi applicarlo alle colonne della tabella! Mi confondevo con le jList ;)
Ho fatto come mi avete indicato,spero :D :rolleyes: ,la cella la renderizza ma l'effetto intermittenza non lo volevo,vi allego il sorgente per dare un'occhiata.:rolleyes:
Cosa intendi per effetto intermittenza??? :confused:
Ho capito...tu hai scritto:
class Miatab implements TableCellRenderer{
public Component getTableCellRendererComponent(JTable table,
Object value,
boolean isSelected,
boolean hasFocus,
int row,
int column)
{
return (new Button("prova"));
}
}
Innanzitutto ho omesso di dirti che che la classe deve estendere JLAbel, perchè ogni cella della tabella non è altro che una JLabel... MA LO AVRESTI SCOPERTO SE AVESSI LETTO LA DOCUMENTAZIONE CHE TI HO LINKATO.
public class MyTableCellRenderer extends JLabel
implements TableCellRenderer {
Tu devi pensare che quel metodo viene eseguito ogni volta che la cella deve essere ridisegnata...immagina quante volte al secondo! Che senso ha poi restituire un new Button????
Ecco una realizzazione significativa di quella classe:
public Component getTableCellRendererComponent(
JTable table, Object value,
boolean isSelected, boolean hasFocus,
int row, int column) {
String s = value.toString();
setText(s);
setIcon(AllegatiConstants.defaultIcon);
if (isSelected) {
setBackground(table.getSelectionBackground());
setForeground(table.getSelectionForeground());
setBorder(BorderFactory.createLoweredBevelBorder());
} else {
setBackground(table.getBackground());
setForeground(table.getForeground());
setBorder(BorderFactory.createRaisedBevelBorder());
}
setEnabled(table.isEnabled());
setFont(table.getFont());
setOpaque(true); //MUST do this for background to show up.
setToolTipText("PROVA!");
return this;
In questo modo si ha un effetto molto carino...quando selezioni una cella è come se premessi un bottone che dal rilievo passa al bassorilievo...provala ;)
Grazie per l'aiuto,se ho capito bene devo estendere JLabel se voglio una label nella cella,se voglio un checkbox estendo JCheckBox,se voglio componenti diversi nella stessa colonna non posso xò averli :cry: ,ho provato ad estendere JPanel e mettere dentro diversi componenti,ma il risultato non è quello voluto :rolleyes: Cmq posso accontentarmi così ciao e grazie ancora!
:)
Esatto...un JPanel nella cella... mmmm... potrebbe esser efattibile, ma onestamente non ci ho mai studiato!
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.