これは、ほとんどのパラメータを持つテーブルを含むデータベースで、そのうちの1つは「タイプ」(TEXT)です。この方法では、この「タイプ」とイム充填コンボボックス:遅延で動作するJavaFX ComboBox
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);
}
その後、私はテーブルビューで選択したタイプのすべての項目を表示するには、このコンボボックスを使用しています。
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());
}
});
}
、ここで選択したパラメータでクエリを実行loadTypeDataFromDB方法は、それはほとんど正しく動作
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);
}
です。私は私のアプリを実行し、ComboBoxから1つのタイプを選択し、何も起こらない(TableViewはクリアなままである)。次に、私はこのComboBoxから他のタイプを選択し、突然このタイプのアイテムをTableViewに表示します。今から、すべてのタイプを表示できます。すべてが機能します。だから、ComboBoxの最初の選択肢がnullであるように見えます(私は例外を何も得ません)。最初の選択肢のすべてが正常に動作を開始した後...
あなたがデバッグする場合は、最初の更新で呼び出さ 'changed'方法であり、 ? IE:実際に変更イベントを受け取りましたが、ロードメソッドが機能していないか、またはコンボボックスが何も報告していないという問題ですか? – Ironcache