Also ich habe Datenbank, die Tabelle mit wenigen Parametern enthält, ist einer von denen "Typ" (TEXT). Im Füllung ComboBox mit diesem „Typ“ mit dieser Methode:JavaFX ComboBox arbeitet mit Verzögerung
public void loadTypefromDB()
{
types = FXCollections.observableArrayList();
try{
ResultSet rs = conn.createStatement().executeQuery("SELECT type FROM Products");
while(rs.next()){
String product = rs.getString("type");
types.add(product);
}
}
catch (SQLException e) {
e.printStackTrace();
}
choiceBox.setItems(types);
}
dann verwende ich dieses ComboBox alle Elemente des ausgewählten Typs in Tableview zu zeigen.
public void choiceType(ActionEvent event)
{
choiceBox.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<String>() {
@Override
public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
loadTypeDataFromDB(newValue.toString());
}
});
}
und hier ist loadTypeDataFromDB Methode, die
public void loadTypeDataFromDB(String type){
products = FXCollections.observableArrayList();
try {
PreparedStatement pst = conn.prepareStatement("SELECT name, kcal, protein, carb, fat FROM Products WHERE type=?");
pst.setString(1, type);
ResultSet rs = pst.executeQuery();
while(rs.next()){
products.add(new productData(rs.getString("name"), rs.getString("kcal"), rs.getString("protein"), rs.getString("carb"), rs.getString("fat")));
}
}
catch (SQLException e) {
e.printStackTrace();
}
colProduct.setCellValueFactory(new PropertyValueFactory<productData, String>("name"));
colKcal.setCellValueFactory(new PropertyValueFactory<productData, String>("kcal"));
colProtein.setCellValueFactory(new PropertyValueFactory<productData, String>("protein"));
colCarbs.setCellValueFactory(new PropertyValueFactory<productData, String>("carb"));
colFat.setCellValueFactory(new PropertyValueFactory<productData, String>("fat"));
tableProduct.setItems(null);
tableProduct.setItems(products);
}
es fast richtig funktioniert Abfrage mit ausgewählten Parameter ausführt. Ich starte meine App, wähle einen der Typen aus der ComboBox und nichts passiert (TableView bleibt frei). Dann wähle ich einen anderen Typ aus dieser ComboBox und plötzlich werden in TableView Objekte dieses Typs angezeigt und von nun an kann ich alle Typen anzeigen, die ich will, alles funktioniert. So sieht es aus wie die erste Wahl von ComboBox ist null (ich bekomme keine Ausnahmen tho). Nach dem ersten Wahl beginnt alles richtig zu arbeiten ...
Wenn Sie, debuggen ist die 'changed' Methode auf erste Update aufgerufen ? IE: Erhalten Sie tatsächlich ein Änderungsereignis und die Lade-Methode funktioniert nicht oder ist das Problem, dass das Kombinationsfeld nichts meldet? – Ironcache