j'ai un probl=E8me avec une JCombobox et un CustomRenderer.
Lorsque la liste s'affiche le renderer m'affiche correctement le
r=E9sultat
mais quand je s=E9lectionne un item dans la liste c'est comme si le
renderer n''=E9tait pas utilis=E9.
En fait, dans ma combobox j'ajoute des beans du m=EAme type WLServer
avec la m=E9thode addItem(). Je veux qu'au lieu de m'afficher le
"contenu" du bean avec la m=E9thode toString(), la combo m'affiche ce
que retourne la m=E9thode toJListFormat()du bean
et
public class WLServerComboBoxRenderer extends JLabel implements
ListCellRenderer {
public WLServerComboBoxRenderer() {
setOpaque(true);
}
public Component getListCellRendererComponent(JList list,
Object o,
int index,
boolean isSelected,
boolean cellHasFocus) {
if ( o instanceof WLServer ) {
WLServer wlserver =3D (WLServer)o;
setText(wlserver.toJListFormat());
}
else {
setText(o.toString());
}
return this;
}
}
Lorsque la liste s'affiche la m=E9thode toJListFormat est bien appel=E9e
mais lorsque je s=E9lectionne un =E9lement, c'est la m=E9thode toString
qui est appel=E9e.
J'ai trac=E9 par des System.out et c'est bien le bout de code
setText(wlserver.toJListFormat()); qui est appel=E9 lorsque je
s=E9lectionne un item. Mais on dirait qu'apr=E8s un autre appel
r=E9=E9crase ce qui est affich=E9.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
damien guerin
ça serait bien que tu dises ce qui s'affiche réellement avant et après la sélection aux 2 index...! Le problème intervient si tu sélectionnes ton 1er item, ton 2eme, les 2 ??
ça serait bien que tu dises ce qui s'affiche réellement avant et
après la sélection aux 2 index...!
Le problème intervient si tu sélectionnes ton 1er item, ton 2eme, les
2 ??
ça serait bien que tu dises ce qui s'affiche réellement avant et après la sélection aux 2 index...! Le problème intervient si tu sélectionnes ton 1er item, ton 2eme, les 2 ??
Kupee
wrote:
j'ai un problème avec une JCombobox et un CustomRenderer. Lorsque la liste s'affiche le renderer m'affiche correctement le résultat mais quand je sélectionne un item dans la liste c'est comme si le renderer n''était pas utilisé.
En fait, dans ma combobox j'ajoute des beans du même type WLServer avec la méthode addItem(). Je veux qu'au lieu de m'afficher le "contenu" du bean avec la méthode toString(), la combo m'affiche ce que retourne la méthode toJListFormat()du bean
et public class WLServerComboBoxRenderer extends JLabel implements ListCellRenderer {
public WLServerComboBoxRenderer() { setOpaque(true); }
public Component getListCellRendererComponent(JList list, Object o, int index, boolean isSelected, boolean cellHasFocus) { if ( o instanceof WLServer ) { WLServer wlserver = (WLServer)o; setText(wlserver.toJListFormat()); } else { setText(o.toString()); } return this; } }
Lorsque la liste s'affiche la méthode toJListFormat est bien appelée mais lorsque je sélectionne un élement, c'est la méthode toString qui est appelée. J'ai tracé par des System.out et c'est bien le bout de code setText(wlserver.toJListFormat()); qui est appelé lorsque je sélectionne un item. Mais on dirait qu'après un autre appel réécrase ce qui est affiché.
A noter que j'utilise JGoodies.
Des idées ?
Euh peut etre que tu devrais aussi implémenter l'Editor de ton JComboBox
luc.dewavrin@gmail.com wrote:
j'ai un problème avec une JCombobox et un CustomRenderer.
Lorsque la liste s'affiche le renderer m'affiche correctement le
résultat
mais quand je sélectionne un item dans la liste c'est comme si le
renderer n''était pas utilisé.
En fait, dans ma combobox j'ajoute des beans du même type WLServer
avec la méthode addItem(). Je veux qu'au lieu de m'afficher le
"contenu" du bean avec la méthode toString(), la combo m'affiche ce
que retourne la méthode toJListFormat()du bean
et
public class WLServerComboBoxRenderer extends JLabel implements
ListCellRenderer {
public WLServerComboBoxRenderer() {
setOpaque(true);
}
public Component getListCellRendererComponent(JList list,
Object o,
int index,
boolean isSelected,
boolean cellHasFocus) {
if ( o instanceof WLServer ) {
WLServer wlserver = (WLServer)o;
setText(wlserver.toJListFormat());
}
else {
setText(o.toString());
}
return this;
}
}
Lorsque la liste s'affiche la méthode toJListFormat est bien appelée
mais lorsque je sélectionne un élement, c'est la méthode toString
qui est appelée.
J'ai tracé par des System.out et c'est bien le bout de code
setText(wlserver.toJListFormat()); qui est appelé lorsque je
sélectionne un item. Mais on dirait qu'après un autre appel
réécrase ce qui est affiché.
A noter que j'utilise JGoodies.
Des idées ?
Euh peut etre que tu devrais aussi implémenter l'Editor de ton JComboBox
j'ai un problème avec une JCombobox et un CustomRenderer. Lorsque la liste s'affiche le renderer m'affiche correctement le résultat mais quand je sélectionne un item dans la liste c'est comme si le renderer n''était pas utilisé.
En fait, dans ma combobox j'ajoute des beans du même type WLServer avec la méthode addItem(). Je veux qu'au lieu de m'afficher le "contenu" du bean avec la méthode toString(), la combo m'affiche ce que retourne la méthode toJListFormat()du bean
et public class WLServerComboBoxRenderer extends JLabel implements ListCellRenderer {
public WLServerComboBoxRenderer() { setOpaque(true); }
public Component getListCellRendererComponent(JList list, Object o, int index, boolean isSelected, boolean cellHasFocus) { if ( o instanceof WLServer ) { WLServer wlserver = (WLServer)o; setText(wlserver.toJListFormat()); } else { setText(o.toString()); } return this; } }
Lorsque la liste s'affiche la méthode toJListFormat est bien appelée mais lorsque je sélectionne un élement, c'est la méthode toString qui est appelée. J'ai tracé par des System.out et c'est bien le bout de code setText(wlserver.toJListFormat()); qui est appelé lorsque je sélectionne un item. Mais on dirait qu'après un autre appel réécrase ce qui est affiché.
A noter que j'utilise JGoodies.
Des idées ?
Euh peut etre que tu devrais aussi implémenter l'Editor de ton JComboBox
luc.dewavrin
En fait je n'ai rempli qu'un seul item d'un bean WLServer (exemple simplifié ici): class WLServer { private String hostname; private int port;
public String toString() { return String.valueOf(this.hashcode()); }
public String toJListFormat() { return hostname+":"+String.valueOf(port); }
} Avant la sélection, je vois le résultat de la méthode toJistFormat() sur le bean et après sélection je vois le résultat de la méthode toString().
damien guerin
Si tu mets des system.out.println tel que : dans ton toString de WLServer : System.out.println("toString WLServer"); dans ton toJListFormat de WLServer : System.out.println("toJListFormat WLServer"); dans getListCellRendererComponent sous setText(wlserver.toJListFormat()); : System.out.println("WLServer objet"); dans getListCellRendererComponent sous setText(o.toString()); : System.out.println("Non WLServer objet");
Qu'est ce qui s'affiche à l'exécution?
Si tu mets des system.out.println tel que :
dans ton toString de WLServer : System.out.println("toString
WLServer");
dans ton toJListFormat de WLServer : System.out.println("toJListFormat
WLServer");
dans getListCellRendererComponent sous
setText(wlserver.toJListFormat()); : System.out.println("WLServer
objet");
dans getListCellRendererComponent sous setText(o.toString()); :
System.out.println("Non WLServer objet");
Si tu mets des system.out.println tel que : dans ton toString de WLServer : System.out.println("toString WLServer"); dans ton toJListFormat de WLServer : System.out.println("toJListFormat WLServer"); dans getListCellRendererComponent sous setText(wlserver.toJListFormat()); : System.out.println("WLServer objet"); dans getListCellRendererComponent sous setText(o.toString()); : System.out.println("Non WLServer objet");
Qu'est ce qui s'affiche à l'exécution?
luc.dewavrin
J'ai plusieurs séquences: WLServer objet toJListFormat WLServer
Lorsque je déroule la combo et que je déplace mon curseur dessus. Je clique et voici ce qui apparaît: toString WLServer WLServer objet toJListFormat WLServer toString WLServer
Je ne comprends pas c'est bien un toString() qui est appelé et je ne vois aucun " Non WLServer objet", le renderer est outrepassé
En fait j'ai aussi alimenté ma liste dès le départ et c'est pareil l'item sélectionné est affiché avec toString(). Je l'impression que pour l'item selectionné le renderer n'est pas utilisé.
J'ai plusieurs séquences:
WLServer objet
toJListFormat WLServer
Lorsque je déroule la combo et que je déplace mon curseur dessus.
Je clique et voici ce qui apparaît:
toString WLServer
WLServer objet
toJListFormat WLServer
toString WLServer
Je ne comprends pas c'est bien un toString() qui est appelé et je ne
vois aucun " Non WLServer objet", le renderer est outrepassé
En fait j'ai aussi alimenté ma liste dès le départ et c'est pareil
l'item sélectionné est affiché avec toString(). Je l'impression que
pour l'item selectionné le renderer n'est pas utilisé.
J'ai plusieurs séquences: WLServer objet toJListFormat WLServer
Lorsque je déroule la combo et que je déplace mon curseur dessus. Je clique et voici ce qui apparaît: toString WLServer WLServer objet toJListFormat WLServer toString WLServer
Je ne comprends pas c'est bien un toString() qui est appelé et je ne vois aucun " Non WLServer objet", le renderer est outrepassé
En fait j'ai aussi alimenté ma liste dès le départ et c'est pareil l'item sélectionné est affiché avec toString(). Je l'impression que pour l'item selectionné le renderer n'est pas utilisé.
Kupee
wrote:
J'ai plusieurs séquences: WLServer objet toJListFormat WLServer
Lorsque je déroule la combo et que je déplace mon curseur dessus. Je clique et voici ce qui apparaît: toString WLServer WLServer objet toJListFormat WLServer toString WLServer
Je ne comprends pas c'est bien un toString() qui est appelé et je ne vois aucun " Non WLServer objet", le renderer est outrepassé
En fait j'ai aussi alimenté ma liste dès le départ et c'est pareil l'item sélectionné est affiché avec toString(). Je l'impression que pour l'item selectionné le renderer n'est pas utilisé.
Je sais pas si mon post était la solution mais l'as tu essayé ? Lorsque tu edite un element de ta liste, il n'est pas visualisé avec le ListCellRenderer mais avec le ComboBoxEditor voilà un petit exemple
import javax.swing.*; import java.awt.*;
public class Tutu extends JFrame {
public Tutu() throws HeadlessException { JComboBox b = new JComboBox(new Object[]{"CACA","COCO"}); b.setEditable(true); b.setRenderer(new MyRenderer()); b.setEditor(new MyEditor()); getContentPane().add(b); pack(); }
public static void main(String[] args) { new Tutu().setVisible(true); }
class MyRenderer extends JLabel implements ListCellRenderer { public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { setText(((String)value).toLowerCase()); return this; } }
class MyEditor extends JTextField implements ComboBoxEditor { public Component getEditorComponent() { return this; }
public void setItem(Object anObject) { setText(((String)anObject).toLowerCase()); }
public Object getItem() { return getText().toLowerCase(); } } }
Je met des String en majuscule dans le combo et le renderer les rend en minuscule. Si tu met pas l'Editor, tu les éditera en majuscule, si tu met l'editor, tu les verra en minuscule aussi, voilà
luc.dewavrin@gmail.com wrote:
J'ai plusieurs séquences:
WLServer objet
toJListFormat WLServer
Lorsque je déroule la combo et que je déplace mon curseur dessus.
Je clique et voici ce qui apparaît:
toString WLServer
WLServer objet
toJListFormat WLServer
toString WLServer
Je ne comprends pas c'est bien un toString() qui est appelé et je ne
vois aucun " Non WLServer objet", le renderer est outrepassé
En fait j'ai aussi alimenté ma liste dès le départ et c'est pareil
l'item sélectionné est affiché avec toString(). Je l'impression que
pour l'item selectionné le renderer n'est pas utilisé.
Je sais pas si mon post était la solution mais l'as tu essayé ?
Lorsque tu edite un element de ta liste, il n'est pas visualisé avec le
ListCellRenderer mais avec le ComboBoxEditor voilà un petit exemple
import javax.swing.*;
import java.awt.*;
public class Tutu extends JFrame {
public Tutu() throws HeadlessException {
JComboBox b = new JComboBox(new Object[]{"CACA","COCO"});
b.setEditable(true);
b.setRenderer(new MyRenderer());
b.setEditor(new MyEditor());
getContentPane().add(b);
pack();
}
public static void main(String[] args) {
new Tutu().setVisible(true);
}
class MyRenderer extends JLabel implements ListCellRenderer {
public Component getListCellRendererComponent(JList list,
Object value,
int index,
boolean isSelected,
boolean
cellHasFocus) {
setText(((String)value).toLowerCase());
return this;
}
}
class MyEditor extends JTextField implements ComboBoxEditor {
public Component getEditorComponent() {
return this;
}
public void setItem(Object anObject) {
setText(((String)anObject).toLowerCase());
}
public Object getItem() {
return getText().toLowerCase();
}
}
}
Je met des String en majuscule dans le combo et le renderer les rend en
minuscule. Si tu met pas l'Editor, tu les éditera en majuscule, si tu
met l'editor, tu les verra en minuscule aussi, voilà
J'ai plusieurs séquences: WLServer objet toJListFormat WLServer
Lorsque je déroule la combo et que je déplace mon curseur dessus. Je clique et voici ce qui apparaît: toString WLServer WLServer objet toJListFormat WLServer toString WLServer
Je ne comprends pas c'est bien un toString() qui est appelé et je ne vois aucun " Non WLServer objet", le renderer est outrepassé
En fait j'ai aussi alimenté ma liste dès le départ et c'est pareil l'item sélectionné est affiché avec toString(). Je l'impression que pour l'item selectionné le renderer n'est pas utilisé.
Je sais pas si mon post était la solution mais l'as tu essayé ? Lorsque tu edite un element de ta liste, il n'est pas visualisé avec le ListCellRenderer mais avec le ComboBoxEditor voilà un petit exemple
import javax.swing.*; import java.awt.*;
public class Tutu extends JFrame {
public Tutu() throws HeadlessException { JComboBox b = new JComboBox(new Object[]{"CACA","COCO"}); b.setEditable(true); b.setRenderer(new MyRenderer()); b.setEditor(new MyEditor()); getContentPane().add(b); pack(); }
public static void main(String[] args) { new Tutu().setVisible(true); }
class MyRenderer extends JLabel implements ListCellRenderer { public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { setText(((String)value).toLowerCase()); return this; } }
class MyEditor extends JTextField implements ComboBoxEditor { public Component getEditorComponent() { return this; }
public void setItem(Object anObject) { setText(((String)anObject).toLowerCase()); }
public Object getItem() { return getText().toLowerCase(); } } }
Je met des String en majuscule dans le combo et le renderer les rend en minuscule. Si tu met pas l'Editor, tu les éditera en majuscule, si tu met l'editor, tu les verra en minuscule aussi, voilà
luc.dewavrin
Oui cela fonctionne avec ton exemple (j'avais mis la Combo en mode éditable).
Un grand merci
Luc
Oui cela fonctionne avec ton exemple (j'avais mis la Combo en mode
éditable).