Bonjour,
Je suis en train de créer une classe générique afin de pouvoir alimenter une première combobox "objet" avec une ArrayList d'objets que j'aurais passés dans le constructeur à l'instanciation de l'objet et ainsi passés dans une listObservable pour le résultat affichable dans la combobox comme par exemple :
Ma classe MaComboBox
Et voila ma classe où j'instancie l'objet et ou je construis mes ArrayList de données :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 package comboBox; import java.io.IOException; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Collection; import Tests.Pays; import Tests.Region; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; import javafx.scene.control.ComboBox; import javafx.scene.control.ListView; import javafx.scene.control.SelectionMode; import javafx.scene.layout.BorderPane; import javafx.scene.layout.GridPane; public class MaComboBox<T> extends BorderPane { /** * ListView de gauche dans le nouveau composant */ @FXML private ComboBox<T> objet; /** * ListView de droite dans le nouveau composant */ @FXML private ComboBox<T> objetEnfant; /** * ObservableList qui permettra de remplir le ListView de gauche */ private ObservableList<T> listObjet; /** * ObservableList qui permettra de remplir le ListView de gauche */ private ObservableList<T> listObjetEnfant; ArrayList<T> objenf = new ArrayList<T>(); public MaComboBox(ArrayList<T> listeObjet) { loader(); this.listObjet = FXCollections.observableArrayList(listeObjet); initialise(); }
et voici ma classe pays où j'ai une ArrayList de Region
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 package Tests; import java.util.ArrayList; import comboBox.MaComboBox; import javafx.application.Application; import javafx.collections.ObservableList; import javafx.scene.Scene; import javafx.scene.control.ComboBox; import javafx.stage.Modality; import javafx.stage.Stage; public class TestComboBox extends Application { MaComboBox mesComboBox; @Override public void start(Stage stage) throws Exception { ArrayList<Pays> payss = new ArrayList<Pays>(); Pays p1 = new Pays(125,"France"); Pays p2 = new Pays(258,"Espagne"); payss.add(p1); payss.add(p2); Region r1 = new Region(1247,"Nord",p1); Region r2 = new Region(145,"fdfd",p1); Region r3 = new Region(489,"df",p1); p1.addRegion(r1); p1.addRegion(r2)); p1.addRegion(r3)); // on créé une nouvelle instance du composant ListSelection, à laquelle on passe les deux listes mesComboBox = new MaComboBox(payss); // on lance l'affichage stage.setScene(new Scene(mesComboBox)); stage.setTitle("Utilisation d'un contrôle personnalisé"); stage.setWidth(800); stage.setHeight(800); stage.show(); }
Mon objectif est que quand je sélectionne un objet pays dans ma combobox ici nommé 'objet' (Exemple : France) ma deuxième combobox nommée ici 'objetEnfant' se remplisse avec les données de la collection ArrayList 'regions' par la méthode 'getRegion()' de l’objet pays que j'aurai sélectionné.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 package Tests; import java.util.ArrayList; public class Pays { private int id; private String nom; private ArrayList<Region> regions = new ArrayList<Region>(); public Pays(int id, String nom) { this.id = id; this.nom = nom; } public void addRegion(Region r) { regions.add(r); } @Override public int hashCode() { return id; } @Override public boolean equals(Object obj) { if (obj == null) return false; if (getClass() != obj.getClass()) return false; Pays other = (Pays) obj; return id == other.id; } @Override public String toString() { return nom; } public int getId() { return id; } public ArrayList<Region> getRegion() { return regions; } }
Mais le problèble est que quand je sélectionne un pays dans ma combo 'objet' qui fonctionne très bien et qui me retourne un pays, impossible de voir les méthode de l'objet pays 'getRegion' car le type passé est générique et non de type Pays :
voici ma fonction de sélection d'un item pays de la combobox pays:
Merci les amis
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 private void selectOne() { if (this.objet.getSelectionModel().getSelectedItem() != null) { System.out.println(listObjet.get(this.objet.getSelectionModel().getSelectedIndex())); //j'ai bien mon objet pays 'ESPAGNE' mais impossible de voir les methode le cette objet!!! }
Partager