Classe gérérique composant ComboBox
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
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 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 voila ma classe où j'instancie l'objet et ou je construis mes ArrayList de données :
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 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();
} |
et voici ma classe pays où j'ai une ArrayList de Region
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 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; }
} |
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é.
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:
Code:
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!!!
} |
Merci les amis