Je n'ai pas réussi à instancier le générique. Je comptais sur Class.forName() mais il faut le nom de la classe. Je n'ai pas trouvé de code qui fonctionne pour récupérer le nom de la classe générique.
L'utilisation de Classe.forName est montréé à partir de la 21eme minute ici :
Dans les autres voies, je trouve des solutions.
Ma première remarque, c'est que je ne comprends pas pourquoi tu veux que ta classe BComboBox soit abstraite. A cause de cela, je dois inutilement l'utiliser en classe anonyme :
BComboBox<String> bc = new BComboBox<String>() {};
Seconde remarque, Il est possible d'utiliser la composition plutôt que l'héritage. Cela conserver la possibilité d'hériter d'autre chose, et en plus, le complèteur de code n'est pas pollué par les méthodes de JComboBox quand on utilise BComboBox.
1 2 3 4 5 6 7 8
|
public abstract class CComboBox<T> {
private JComboBox<T> cb;
public CComboBox() {
super();
cb = new JComboBox<T>();
}
} |
Pour la résolution du problème je trouve 3 possibilités :
1) Fournir l'élément Tous à la méthode addAllOption
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
public abstract class BComboBox<T> extends JComboBox {
protected boolean allOption;
public void addAllOption(T all) {
if (!allOption) {
insertItemAt(all, 0);
}
allOption = true;
}
public void removeAllOption() {
if (allOption) {
removeItemAt(0);
}
allOption = false;
}
private boolean isAllOptionActived() {
return allOption;
}
} |
2) Demander l'élément Tous au constructeur :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
public class B2ComboBox<T> extends JComboBox {
protected boolean allOption;
private T allOptionElement;
private T getAllOptionElement() {
return allOptionElement;
}
public B2ComboBox(T allOptionElement) {
super();
this.allOptionElement = allOptionElement;
}
public void addAllOption() {
if (!allOption) {
insertItemAt(getAllOptionElement(), 0);
}
allOption = true;
}
.....
} |
3) Demander l'élément Tous à la classe fille en passant par une méthode abstraite :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
public abstract class B3ComboBox<T> extends JComboBox {
protected boolean allOption;
public abstract T getAllOptionElement();
public void addAllOption() {
if (!allOption) {
insertItemAt(getAllOptionElement(), 0);
}
allOption = true;
}
.....
} |
Voici l'exemple d'utilisation :
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
|
public class test {
public static void main(String[] args) {
System.out.println("Début test");
CComboBox<String> cc = new CComboBox<String>() {};
System.out.println("Version 1");
BComboBox<String> bc = new BComboBox<String>() {};
bc.addAllOption("Tous");
System.out.println("Version 2");
B2ComboBox<String> bc2 = new B2ComboBox<String>("Tous") ;
bc2.addAllOption();
System.out.println("Version 3");
B3ComboBox<String> bc3 = new B3ComboBox<String>() {
@Override
public String getAllOptionElement() {
return "Tous";
}
};
bc3.addAllOption();
System.out.println("test terminé");
}
} |
Partager