1
verreGcombo
という名前のアイテムが入力されているVerre
のアイテムが入力されています。 1回目と2回目のクリックで値を変更できないことがあります。そのため、矢印を使用してアイテムを選択したり、アイテムを選択するのに3回以上クリックする必要があります。この問題は、(項目の数が5を超えていない)他のコンボボックスで存在していない、ここに私のコードは次のとおりです。JavaFX Comboboxが1回目と2回目のクリックからクリックされた値に変更されない
List<Verre> ListeVerres = em.createQuery("SELECT v FROM Verre v").getResultList();
ObservableList<Verre> dataVerres = FXCollections.observableList(ListeVerres);
ListeVerres.add(null);
verreGcombo.setCellFactory((comboBox) -> {
return new ListCell<Verre>() {
@Override
protected void updateItem(Verre item, boolean empty) {
super.updateItem(item, empty);
if (item == null || empty) {
setText("Choisir");
verreGcombo.getSelectionModel().clearSelection();
//verreGcombo.getItems().clear();
} else {
setText(item.getMatiere() + " " + item.getType());
}
}
};
});
// Define rendering of selected value shown in ComboBox.
verreGcombo.setConverter(new StringConverter<Verre>() {
@Override
public String toString(Verre verre) {
if (verre == null) {
return "Choisir";
} else {
return verre.getMatiere() + " " + verre.getType();
}
}
@Override
public Verre fromString(String articleString) {
return null; // No conversion fromString needed.
}
});
verreGcombo.setOnAction((e) -> {
Verre verreG = verreGcombo.getSelectionModel().getSelectedItem();
if (verreG != null) {
verreGprixT.setText(setFloat(verreG.getArticle().getPrixVenteTTC()));
verreGPrixHR = verreG.getArticle().getPrixVenteTTC();
verreGRemise = (verreGPrixHR * verreG.getArticle().getRemise())/100;
verreGPrix = verreGPrixHR - verreGRemise;
indice.setText(setFloat(verreG.getIndice()));
verreGfield.setText(verreG.getMatiere() + " " + verreG.getType());
} else {
verreGprixT.setText(setFloat(0));
verreGPrixHR = 0;
verreGRemise = 0;
verreGPrix = 0;
indice.setText(setFloat(0));
verreGfield.setText("");
}
});
verreGcombo.setItems(dataVerres);
これは実際には解決しましたが、他のコンボボックスがMouseEventハンドラなしで動作する理由はわかりませんが、アイテムリストの長さと関係があると思います –