Merci Fraco pour le lien mais je n'ai pas d'exemple sur le model du JComboBox.
J'ai donc ré-écris une classe test, pour que vous puissiez m'aider!
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 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
| import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import javax.swing.AbstractListModel;
import javax.swing.ComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.event.ListDataListener;
class MyComboBoxModel extends AbstractListModel implements ComboBoxModel {
/**
* TEST ComboBoxModel
*/
private static final long serialVersionUID = 1L;
private ArrayList<String> liste = new ArrayList<String>();
private String selection;
public MyComboBoxModel(){
}
@Override
public void addListDataListener(ListDataListener arg0) {
// TODO Auto-generated method stub
}
@Override
public Object getElementAt(int index) {
// TODO Auto-generated method stub
return liste.get(index);
}
@Override
public int getSize() {
// TODO Auto-generated method stub
return liste.size();
}
@Override
public void removeListDataListener(ListDataListener arg0) {
// TODO Auto-generated method stub
}
@Override
public Object getSelectedItem() {
// TODO Auto-generated method stub
return selection;
}
@Override
public void setSelectedItem(Object anObject) {
selection = (String) anObject;
}
public void addItem(String liste2){
liste.add(liste2);
this.fireIntervalAdded(this, getSize()-1, getSize()-1);
}
public void removeAllItems() {
liste.clear();
liste = new ArrayList<String>();
selection="";
this.fireIntervalRemoved(this, 0, getSize()-1);
}
public ArrayList<String> getListe() {
return liste;
}
}
public class JComboBoxModel {
private static MyComboBoxModel cbox_model;
public static void main(String[] a){
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel(new FlowLayout(FlowLayout.CENTER, 0, 0));
final JComboBox cbox = new JComboBox(new MyComboBoxModel());
cbox_model= (MyComboBoxModel)cbox.getModel();
cbox.setPreferredSize(new Dimension(280, 50));
cbox.setMaximumRowCount(5);
cbox.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent event) {
System.out.println("Clique liste déroulante: (Selection)"+cbox_model.getSelectedItem()+" | id_selected: "+cbox.getSelectedIndex());
}
});
JButton ajouter=new JButton("Ajouter");
ajouter.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
cbox_model.addItem("élement 1");
cbox_model.addItem("élement 2");
cbox_model.addItem("élement 3");
cbox_model.addItem("élement 4");
cbox_model.addItem("élement 5");
System.out.println("liste nombres : "+cbox_model.getListe().size());
System.out.println("liste :"+cbox_model.getListe());
System.out.println("Elements ajoutés");
}
});
JButton supprimer=new JButton("Supprimer");
supprimer.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
cbox_model.removeAllItems();
//On choisit de sélectionner aucun item
cbox_model.setSelectedItem("");
System.out.println("Elements supprimés");
}
});
panel.add(cbox);
panel.add(ajouter);
panel.add(supprimer);
frame.add(panel);
frame.setSize(300, 200);
frame.setVisible(true);
}
} |
Vous pouvez essayé ce code!
Liste des bugs:
1-Si je clique en premier sur la liste déroulante puis ajouter.
Les éléments n'apparaissent pas dans la liste déroulante.
2-Bug sur la sélection d'un élément
(Pour l'essai, il va falloir cliquer en premier sur Ajouter)
-Cliquer sur Ajouter
-Sélectionner l'élément 4
-Cliquer sur le bouton supprimer
(Normalement l'élément 4 ne devrait plus être sélectionner grâce à cbox_model.setSelectedItem(""))
L'élément apparaît encore dans la liste déroulante
3-Bug de l'élément sélectionné
(Pour l'essai, il va falloir cliquer en premier sur Ajouter)
-Cliquer sur Ajouter
-Sélectionner l'élément 4
Vous avez alors dans la console:
Clique liste déroulante: (Selection)élement 4 | id_selected: 3
-Cliquer sur le bouton supprimer
-Cliquer sur le bouton ajouter
-Sélectionner l'élément 4
L'élément ne se sélectionne pas et :
Vous avez alors dans la console:
Clique liste déroulante: (Selection) | id_selected: -1
Merci pour votre aide
Partager