public class BooleanNewRenderer extends DefaultTableCellRenderer {
protected static Component c;
public BooleanNewRenderer() { super(); } public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
if (value != null) { c = new JCheckBox("", ((Boolean) value).booleanValue()); } else { c = new JLabel("null"); } return this; } }
même le "null" du JLabel n'apparaît pas...
dans le prog principal :
table.setDefaultRenderer(Boolean.class, new BooleanNewRenderer()); -- yt
public class BooleanNewRenderer extends DefaultTableCellRenderer {
protected static Component c;
public BooleanNewRenderer() {
super();
}
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus,
int row, int column) {
if (value != null) {
c = new JCheckBox("", ((Boolean) value).booleanValue());
} else {
c = new JLabel("null");
}
return this;
}
}
même le "null" du JLabel n'apparaît pas...
dans le prog principal :
table.setDefaultRenderer(Boolean.class, new BooleanNewRenderer());
--
yt
public class BooleanNewRenderer extends DefaultTableCellRenderer {
protected static Component c;
public BooleanNewRenderer() { super(); } public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
if (value != null) { c = new JCheckBox("", ((Boolean) value).booleanValue()); } else { c = new JLabel("null"); } return this; } }
même le "null" du JLabel n'apparaît pas...
dans le prog principal :
table.setDefaultRenderer(Boolean.class, new BooleanNewRenderer()); -- yt
Trognon Patrice
Yvon Thoraval wrote:
j'ai un JTreeTable qui a des colonnes Boolean représentées par le DefaultCellRenderer pour Boolean, c-à-d une checkbox.
je voudrais continuer à utiliser cette checkbox, à une condition, que la valeur ne soit pas null.
c-à-d rien dans la row, column si valueAt == null et value.class > Boolean sinon checkbox.
bien sûr ça doit marcher au run time et quelque soit l'indice de la colonne (détection par la clase de la colonne).
qq'un a deja fait qqc dans ce genre ?
Hi,
Oui j'avais créé mon CustomTableCellRenderer qui implementait l'interface TableCellRenderer et je m'etait fortement inspiré du code du DefaultTableCellRenderer.
Je ne me souviens plus pourquoi a l'epoque je n'avais pas surchargé le DefaultTableCellRenderer, mais j'etais tombé sur un os par rapport au comportement dont j'avais besoin, ca remonte au jdk 1.1.8 cette histoire.
A mon avis en surchargeant tu dois t'en sortir.
vala.
Patrice Trognon http://www.javadevel.com
Yvon Thoraval wrote:
j'ai un JTreeTable qui a des colonnes Boolean représentées par le
DefaultCellRenderer pour Boolean, c-à-d une checkbox.
je voudrais continuer à utiliser cette checkbox, à une condition, que la
valeur ne soit pas null.
c-à-d rien dans la row, column si valueAt == null et value.class > Boolean sinon checkbox.
bien sûr ça doit marcher au run time et quelque soit l'indice de la
colonne (détection par la clase de la colonne).
qq'un a deja fait qqc dans ce genre ?
Hi,
Oui j'avais créé mon CustomTableCellRenderer qui implementait l'interface
TableCellRenderer et je m'etait fortement inspiré du code du DefaultTableCellRenderer.
Je ne me souviens plus pourquoi a l'epoque je n'avais pas surchargé
le DefaultTableCellRenderer, mais j'etais tombé sur un os par rapport au
comportement dont j'avais besoin, ca remonte au jdk 1.1.8 cette histoire.
j'ai un JTreeTable qui a des colonnes Boolean représentées par le DefaultCellRenderer pour Boolean, c-à-d une checkbox.
je voudrais continuer à utiliser cette checkbox, à une condition, que la valeur ne soit pas null.
c-à-d rien dans la row, column si valueAt == null et value.class > Boolean sinon checkbox.
bien sûr ça doit marcher au run time et quelque soit l'indice de la colonne (détection par la clase de la colonne).
qq'un a deja fait qqc dans ce genre ?
Hi,
Oui j'avais créé mon CustomTableCellRenderer qui implementait l'interface TableCellRenderer et je m'etait fortement inspiré du code du DefaultTableCellRenderer.
Je ne me souviens plus pourquoi a l'epoque je n'avais pas surchargé le DefaultTableCellRenderer, mais j'etais tombé sur un os par rapport au comportement dont j'avais besoin, ca remonte au jdk 1.1.8 cette histoire.
A mon avis en surchargeant tu dois t'en sortir.
vala.
Patrice Trognon http://www.javadevel.com
yvon.thoravalNO-SPAM
Trognon Patrice wrote:
A mon avis en surchargeant tu dois t'en sortir.
mais on peut surcharger un defaultCellrenderer spécifique, ce que j'ai fait mais qui ne donne rien :
public class BooleanNewRenderer extends DefaultTableCellRenderer {
protected static Component c;
public BooleanNewRenderer() { super(); } public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
if (value != null) { c = new JCheckBox("", ((Boolean) value).booleanValue()); } else { c = new JLabel("null"); } return this; } }
c'est toujours Boolean DefaultCellRenderer qui apparaît, MAIS, uniquement depuis que j'ai ajouté :
table.setDefaultRenderer(Boolean.class, new BooleanNewRenderer()); (ds le prog principal)
il n'apparaît, dans n'importe quelle row (même celles à null) que lorsque je clique sur la cell correspondante. -- yt
mais on peut surcharger un defaultCellrenderer spécifique, ce que j'ai
fait mais qui ne donne rien :
public class BooleanNewRenderer extends DefaultTableCellRenderer {
protected static Component c;
public BooleanNewRenderer() {
super();
}
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus,
int row, int column) {
if (value != null) {
c = new JCheckBox("", ((Boolean) value).booleanValue());
} else {
c = new JLabel("null");
}
return this;
}
}
c'est toujours Boolean DefaultCellRenderer qui apparaît, MAIS,
uniquement depuis que j'ai ajouté :
table.setDefaultRenderer(Boolean.class, new BooleanNewRenderer());
(ds le prog principal)
il n'apparaît, dans n'importe quelle row (même celles à null) que
lorsque je clique sur la cell correspondante.
--
yt
mais on peut surcharger un defaultCellrenderer spécifique, ce que j'ai fait mais qui ne donne rien :
public class BooleanNewRenderer extends DefaultTableCellRenderer {
protected static Component c;
public BooleanNewRenderer() { super(); } public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
if (value != null) { c = new JCheckBox("", ((Boolean) value).booleanValue()); } else { c = new JLabel("null"); } return this; } }
c'est toujours Boolean DefaultCellRenderer qui apparaît, MAIS, uniquement depuis que j'ai ajouté :
table.setDefaultRenderer(Boolean.class, new BooleanNewRenderer()); (ds le prog principal)
il n'apparaît, dans n'importe quelle row (même celles à null) que lorsque je clique sur la cell correspondante. -- yt
Trognon Patrice
Yvon Thoraval wrote:
Trognon Patrice wrote:
A mon avis en surchargeant tu dois t'en sortir.
mais on peut surcharger un defaultCellrenderer spécifique, ce que j'ai fait mais qui ne donne rien :
public class BooleanNewRenderer extends DefaultTableCellRenderer {
protected static Component c;
public BooleanNewRenderer() { super(); } public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
if (value != null) { c = new JCheckBox("", ((Boolean) value).booleanValue()); } else { c = new JLabel("null"); } return this; } }
c'est toujours Boolean DefaultCellRenderer qui apparaît, MAIS, uniquement depuis que j'ai ajouté :
table.setDefaultRenderer(Boolean.class, new BooleanNewRenderer()); (ds le prog principal)
il n'apparaît, dans n'importe quelle row (même celles à null) que lorsque je clique sur la cell correspondante.
Je l'avais initialisé de facon plus fine que ca, c'est a dire non pas pour toute la table mais pour chaque cellule, et la ca marchait.
mais on peut surcharger un defaultCellrenderer spécifique, ce que j'ai
fait mais qui ne donne rien :
public class BooleanNewRenderer extends DefaultTableCellRenderer {
protected static Component c;
public BooleanNewRenderer() {
super();
}
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus,
int row, int column) {
if (value != null) {
c = new JCheckBox("", ((Boolean) value).booleanValue());
} else {
c = new JLabel("null");
}
return this;
}
}
c'est toujours Boolean DefaultCellRenderer qui apparaît, MAIS,
uniquement depuis que j'ai ajouté :
table.setDefaultRenderer(Boolean.class, new BooleanNewRenderer());
(ds le prog principal)
il n'apparaît, dans n'importe quelle row (même celles à null) que
lorsque je clique sur la cell correspondante.
Je l'avais initialisé de facon plus fine que ca, c'est a dire non pas
pour toute la table mais pour chaque cellule, et la ca marchait.
mais on peut surcharger un defaultCellrenderer spécifique, ce que j'ai fait mais qui ne donne rien :
public class BooleanNewRenderer extends DefaultTableCellRenderer {
protected static Component c;
public BooleanNewRenderer() { super(); } public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
if (value != null) { c = new JCheckBox("", ((Boolean) value).booleanValue()); } else { c = new JLabel("null"); } return this; } }
c'est toujours Boolean DefaultCellRenderer qui apparaît, MAIS, uniquement depuis que j'ai ajouté :
table.setDefaultRenderer(Boolean.class, new BooleanNewRenderer()); (ds le prog principal)
il n'apparaît, dans n'importe quelle row (même celles à null) que lorsque je clique sur la cell correspondante.
Je l'avais initialisé de facon plus fine que ca, c'est a dire non pas pour toute la table mais pour chaque cellule, et la ca marchait.
Patrice Trognon. http://www.javadevel.com
yvon.thoravalNO-SPAM
Trognon Patrice wrote:
Je l'avais initialisé de facon plus fine que ca, c'est a dire non pas pour toute la table mais pour chaque cellule, et la ca marchait.
ben maintenant ça "marchotte" en retournant c au lieu de this ... en plus j'ai fait : public class BooleanNewRenderer extends Component implements TableCellRenderer {
donc j'ai bien une JCheckBox sans le bon état si la valeur de la row est différente de null, et rien si null, ce que je cherchais avoir...
MAIS p'tit pb à résoudre : quand je clique sur une cell avec JCheckBox, la JCheckBox se déplace vers la droite...
et je ne parvient pas à avoir set[Fore|Back]ground ... -- yt
Je l'avais initialisé de facon plus fine que ca, c'est a dire non pas
pour toute la table mais pour chaque cellule, et la ca marchait.
ben maintenant ça "marchotte" en retournant c au lieu de this ...
en plus j'ai fait :
public class BooleanNewRenderer extends Component implements
TableCellRenderer {
donc j'ai bien une JCheckBox sans le bon état si la valeur de la row est
différente de null, et rien si null, ce que je cherchais avoir...
MAIS p'tit pb à résoudre : quand je clique sur une cell avec JCheckBox,
la JCheckBox se déplace vers la droite...
et je ne parvient pas à avoir set[Fore|Back]ground ...
--
yt
Je l'avais initialisé de facon plus fine que ca, c'est a dire non pas pour toute la table mais pour chaque cellule, et la ca marchait.
ben maintenant ça "marchotte" en retournant c au lieu de this ... en plus j'ai fait : public class BooleanNewRenderer extends Component implements TableCellRenderer {
donc j'ai bien une JCheckBox sans le bon état si la valeur de la row est différente de null, et rien si null, ce que je cherchais avoir...
MAIS p'tit pb à résoudre : quand je clique sur une cell avec JCheckBox, la JCheckBox se déplace vers la droite...
et je ne parvient pas à avoir set[Fore|Back]ground ... -- yt
jocelyn
Salut ! Moi il y a un truc qui me chiffonne un peu.... a la fin de ta methode getTableCellRendererComponent(), tu retourne this, c'est à dire ton BooleanRenderer, qui est en fait une sous-classe de JLabel. Tout ce que tu fais au niveau du composant c ne sert donc à rien a mon avis, si tu as vraiment mis ca dans ton programme... -- Celui qui lutte contre des monstres doit prendre garde, dans le combat, à ne pas devenir un monstre lui-même
Salut !
Moi il y a un truc qui me chiffonne un peu....
a la fin de ta methode getTableCellRendererComponent(),
tu retourne this, c'est à dire ton BooleanRenderer, qui est
en fait une sous-classe de JLabel. Tout ce que tu fais
au niveau du composant c ne sert donc à rien a mon avis,
si tu as vraiment mis ca dans ton programme...
--
Celui qui lutte contre des monstres doit prendre garde, dans le combat, à ne
pas devenir un monstre lui-même
Salut ! Moi il y a un truc qui me chiffonne un peu.... a la fin de ta methode getTableCellRendererComponent(), tu retourne this, c'est à dire ton BooleanRenderer, qui est en fait une sous-classe de JLabel. Tout ce que tu fais au niveau du composant c ne sert donc à rien a mon avis, si tu as vraiment mis ca dans ton programme... -- Celui qui lutte contre des monstres doit prendre garde, dans le combat, à ne pas devenir un monstre lui-même
jocelyn
Re :) Il semblerait que ton message ait croisé le mien puisque tu retournes c et non pas this :) Pour ton nouveau probleme, ta table est-elle editable ? Si oui, ton probleme est surement que lorsque la table rentre en mode edition, elle va chercher un editeur pour la cellule, qui n'est probablement pas configuré de la meme maniere que ton renderer personnalisé.
-- Celui qui lutte contre des monstres doit prendre garde, dans le combat, à ne pas devenir un monstre lui-même
Re :)
Il semblerait que ton message ait croisé le mien puisque tu retournes c et
non pas this :)
Pour ton nouveau probleme, ta table est-elle editable ? Si oui, ton probleme
est
surement que lorsque la table rentre en mode edition, elle va chercher un
editeur pour
la cellule, qui n'est probablement pas configuré de la meme maniere que ton
renderer
personnalisé.
--
Celui qui lutte contre des monstres doit prendre garde, dans le combat, à ne
pas devenir un monstre lui-même
Re :) Il semblerait que ton message ait croisé le mien puisque tu retournes c et non pas this :) Pour ton nouveau probleme, ta table est-elle editable ? Si oui, ton probleme est surement que lorsque la table rentre en mode edition, elle va chercher un editeur pour la cellule, qui n'est probablement pas configuré de la meme maniere que ton renderer personnalisé.
-- Celui qui lutte contre des monstres doit prendre garde, dans le combat, à ne pas devenir un monstre lui-même
yvon.thoravalNO-SPAM
jocelyn wrote:
a la fin de ta methode getTableCellRendererComponent(), tu retourne this,
non, je retourne c, effectivement le this ne donne rien, mais c'est ce qui est employé dans les exemples rencontrés sur le net.
le this ne marche que si je retourne un component spécifique (JCheckBox par ex) or là, je retourne soit un JLabel("") si la valeur est à null, soit une JCheckBox si valeur true|false... -- yt
jocelyn <eelluurriinn@free.fr> wrote:
a la fin de ta methode getTableCellRendererComponent(),
tu retourne this,
non, je retourne c, effectivement le this ne donne rien, mais c'est ce
qui est employé dans les exemples rencontrés sur le net.
le this ne marche que si je retourne un component spécifique (JCheckBox
par ex) or là, je retourne soit un JLabel("") si la valeur est à null,
soit une JCheckBox si valeur true|false...
--
yt
a la fin de ta methode getTableCellRendererComponent(), tu retourne this,
non, je retourne c, effectivement le this ne donne rien, mais c'est ce qui est employé dans les exemples rencontrés sur le net.
le this ne marche que si je retourne un component spécifique (JCheckBox par ex) or là, je retourne soit un JLabel("") si la valeur est à null, soit une JCheckBox si valeur true|false... -- yt
yvon.thoravalNO-SPAM
jocelyn wrote:
Pour ton nouveau probleme, ta table est-elle editable ? Si oui, ton probleme est surement que lorsque la table rentre en mode edition, elle va chercher un editeur pour la cellule,
Oui, c'est exactement ça, comme les datas sont issues d'une database, editer une row n'est pas si simple.
Je dois implémenter un model qui contient , comme colonne, l'index de la ligne mais ne le "view" pas, et une ligne qui donne pour chaque colonne le nom de la colonne dans ma table sql...
Je dois aussi chercher un moyen pour indiquer qu'une string est en réalité le path d'une image est implémenter le CellRenderer adequat... -- yt
jocelyn <eelluurriinn@free.fr> wrote:
Pour ton nouveau probleme, ta table est-elle editable ? Si oui, ton probleme
est
surement que lorsque la table rentre en mode edition, elle va chercher un
editeur pour
la cellule,
Oui, c'est exactement ça, comme les datas sont issues d'une database,
editer une row n'est pas si simple.
Je dois implémenter un model qui contient , comme colonne, l'index de la
ligne mais ne le "view" pas, et une ligne qui donne pour chaque colonne
le nom de la colonne dans ma table sql...
Je dois aussi chercher un moyen pour indiquer qu'une string est en
réalité le path d'une image est implémenter le CellRenderer adequat...
--
yt
Pour ton nouveau probleme, ta table est-elle editable ? Si oui, ton probleme est surement que lorsque la table rentre en mode edition, elle va chercher un editeur pour la cellule,
Oui, c'est exactement ça, comme les datas sont issues d'une database, editer une row n'est pas si simple.
Je dois implémenter un model qui contient , comme colonne, l'index de la ligne mais ne le "view" pas, et une ligne qui donne pour chaque colonne le nom de la colonne dans ma table sql...
Je dois aussi chercher un moyen pour indiquer qu'une string est en réalité le path d'une image est implémenter le CellRenderer adequat... -- yt
jocelyn
Tu as plusieurs manieres d'implémenter ton propre renderer: 1) Sous-classer DefaultTableCellRenderer 2) Implémenter l'interface TableCellRenderer
Dans le 1er cas, la méthode retournera effectivement this, car DefaultTableCellRenderer est un JLabel. Dans le second cas, la classe que tu vas creer pour implémenter l'interface gérera probablement un composant quelconque c (JCombo, JCheck....), et c'est ce composant que la méthode retournera. C'est pour ca que sur le net tu trouveras effectivement les 2 options, en fonction de ce que l'on veut faire. Par exemple dans ton cas, la méthode 1 n'est clairement pas un bon choix puisque ce que tu veux afficher n'a rien (ou pas grand chose) d'un JLabel.
-- Celui qui lutte contre des monstres doit prendre garde, dans le combat, à ne pas devenir un monstre lui-même
"Yvon Thoraval" a écrit dans le message news: 1glukx2.ofdz2814l5m6jN%
jocelyn wrote:
a la fin de ta methode getTableCellRendererComponent(), tu retourne this,
non, je retourne c, effectivement le this ne donne rien, mais c'est ce qui est employé dans les exemples rencontrés sur le net.
le this ne marche que si je retourne un component spécifique (JCheckBox par ex) or là, je retourne soit un JLabel("") si la valeur est à null, soit une JCheckBox si valeur true|false... -- yt
Tu as plusieurs manieres d'implémenter ton propre renderer:
1) Sous-classer DefaultTableCellRenderer
2) Implémenter l'interface TableCellRenderer
Dans le 1er cas, la méthode retournera effectivement this, car
DefaultTableCellRenderer est un JLabel.
Dans le second cas, la classe que tu vas creer pour implémenter l'interface
gérera probablement un
composant quelconque c (JCombo, JCheck....), et c'est ce composant que la
méthode retournera.
C'est pour ca que sur le net tu trouveras effectivement les 2 options, en
fonction de ce que l'on veut faire.
Par exemple dans ton cas, la méthode 1 n'est clairement pas un bon choix
puisque ce que tu veux afficher n'a rien (ou pas grand chose) d'un JLabel.
--
Celui qui lutte contre des monstres doit prendre garde, dans le combat, à ne
pas devenir un monstre lui-même
"Yvon Thoraval" <yvon.thoravalNO-SPAM@free.fr> a écrit dans le message news:
1glukx2.ofdz2814l5m6jN%yvon.thoravalNO-SPAM@free.fr...
jocelyn <eelluurriinn@free.fr> wrote:
a la fin de ta methode getTableCellRendererComponent(),
tu retourne this,
non, je retourne c, effectivement le this ne donne rien, mais c'est ce
qui est employé dans les exemples rencontrés sur le net.
le this ne marche que si je retourne un component spécifique (JCheckBox
par ex) or là, je retourne soit un JLabel("") si la valeur est à null,
soit une JCheckBox si valeur true|false...
--
yt
Tu as plusieurs manieres d'implémenter ton propre renderer: 1) Sous-classer DefaultTableCellRenderer 2) Implémenter l'interface TableCellRenderer
Dans le 1er cas, la méthode retournera effectivement this, car DefaultTableCellRenderer est un JLabel. Dans le second cas, la classe que tu vas creer pour implémenter l'interface gérera probablement un composant quelconque c (JCombo, JCheck....), et c'est ce composant que la méthode retournera. C'est pour ca que sur le net tu trouveras effectivement les 2 options, en fonction de ce que l'on veut faire. Par exemple dans ton cas, la méthode 1 n'est clairement pas un bon choix puisque ce que tu veux afficher n'a rien (ou pas grand chose) d'un JLabel.
-- Celui qui lutte contre des monstres doit prendre garde, dans le combat, à ne pas devenir un monstre lui-même
"Yvon Thoraval" a écrit dans le message news: 1glukx2.ofdz2814l5m6jN%
jocelyn wrote:
a la fin de ta methode getTableCellRendererComponent(), tu retourne this,
non, je retourne c, effectivement le this ne donne rien, mais c'est ce qui est employé dans les exemples rencontrés sur le net.
le this ne marche que si je retourne un component spécifique (JCheckBox par ex) or là, je retourne soit un JLabel("") si la valeur est à null, soit une JCheckBox si valeur true|false... -- yt