ich zwei Arten von Klassen, die X-Klasse erweiternJavaFX benutzerdefinierte ComboBox mit generischer Klasse
public class A extends X
und
public class B extends X
Innerhalb meiner JavaFX-Anwendung muss es eine Combobox sein. Dieses Kombinationsfeld wird entweder mit den Klassen A oder B erstellt und verwendet die jeweilige toString() -Methode dieser Klasse zum Auffüllen. Um die Code-Duplizierung zu reduzieren.
Ich versuche, meine aktuelle Methode zur Erzeugung des comboBox zu ändern, so dass es einer ObservableList vom Typ A oder B.
protected ComboBox<? extends X> getComboBox(ObservableList<? extends X> list){
ComboBox<? extends X> comboBox = new ComboBox<>();
comboBox.setItems(list);
comboBox.setCellFactory(new Callback<ListView<? extends X>, ListCell<? extends X>>() {
@Override
public ListCell<Controller> call(ListView<Controller> param) {
return new ListCell<? extends X>(){
@Override
public void updateItem(Class<? extends X> content, boolean empty){
super.updateItem(content, empty);
if(!empty) {
setText(content.toString());
} else {
setText(null);
}
}
};
}
});
return comboBox;
}
erlaubt Da sowohl die Klassen eine übergeordnete Klasse haben, ist es möglich, erreichen Sie etwas wie dieses (Und potenziell, aber nicht wesentlich, geben Sie es zurück, da es ursprünglicher Klassentyp ist)
@SillyFly - Ich rufe die Liste auf, die die Reflexionen Abhängigkeit verwendet. Es gibt alle Klassen eines bestimmten Typs (d A)
public ObservableList<A> getAList() {
Reflections reflection = new Reflections("com.classes.aClasses");
ObservableList<A> classesList = FXCollections.observableArrayList();
for (Class<? extends A> thisClass : reflection.getSubTypesOf(A.class)) {
try {
classesList.add(thisClass.newInstance());
} catch (Exception e) {
e.printStackTrace();
}
}
return classesList;
}
Was ist 'Input'? Ist das die Basisklasse (die du vorher 'X' genannt hast)? – Itai
@sillyfly korrigiert – Eunanibus