Bonjour,
J'ai une combobox éditable, le but est lorsqu'on y ajoute du texte, il se met en rouge.
On m'a dit d'utiliser un Renderer mais la seule chose que j'arrive à faire avec c'est changer la couleur de la sélection...
Merci d'avance.
Version imprimable
Bonjour,
J'ai une combobox éditable, le but est lorsqu'on y ajoute du texte, il se met en rouge.
On m'a dit d'utiliser un Renderer mais la seule chose que j'arrive à faire avec c'est changer la couleur de la sélection...
Merci d'avance.
Commence par donner ton code.
Justement, si je poste c'est que je n'ai pas réussi à faire un code qui corresponde à ce que je veux...
De plus, on m'a dit que pour une combobox éditable il fallait plutôt créer un Editor et non un Renderer.
Donc, j'ai essayé de créer mon Editor, en essayant déjà de colorer en rouge sans tester si c'est du texte. Mais ça ne marche pas, ça me fait complètement disparaître la zone de texte. J'ai surement dû oublier quelque chose...
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 private class ColorComboBoxEditor implements ComboBoxEditor { final protected JLabel editor; protected EventListenerList listenerList = new EventListenerList(); public ColorComboBoxEditor(){ editor = new JLabel(); editor.setForeground(Color.RED); editor.setOpaque(true); } @Override public Component getEditorComponent() { return editor; } @Override public void setItem(Object newValue) { } @Override public Object getItem() { return editor.getBackground(); } @Override public void selectAll() { } @Override public void addActionListener(ActionListener al) { listenerList.add(ActionListener.class, al); } @Override public void removeActionListener(ActionListener al) { listenerList.remove(ActionListener.class, al); } }
J'ai trouvé la solution :
pas besoin de créer son Editor, il faut seulement passer par :
getEditor().getEditorComponent().setForeground(Color.RED);
Pour donner la réponse à ma question :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 public class MyComboBox extends JComboBox { public MyComboBox() { getEditor().getEditorComponent().addFocusListener(new FocusAdapter() { @Override public void focusLost(FocusEvent e) { checkIfDouble(); } }); getEditor().getEditorComponent().addKeyListener(new KeyAdapter() { @Override public void keyReleased(KeyEvent e) { checkIfDouble(); } }); public boolean checkIfDouble(){ JTextField comboTextField = (JTextField)getEditor().getEditorComponent(); String value = comboTextField.getText(); try { double doubleValue = Double.parseDouble(value); } catch (NumberFormatException numberFormatException){ getEditor().getEditorComponent().setForeground(Color.RED); return false; } getEditor().getEditorComponent().setForeground(Color.BLACK); return true; } }