1
我有一個名爲verreGcombo
的ComboBox
,其中填充的項目類型爲Verre
,我面對的問題是當我想從中選擇一個值時,總是無法在第一次和第二次點擊時更改其值,所以我總是必須使用箭頭導航和選擇項目,或者點擊三次以上來選擇項目。這個問題不存在與其他組合框(其中項目數不超過5),這裏是我的代碼:JavaFX Combobox不會更改爲點擊第一次和第二次點擊的值
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處理程序,我認爲它與項目列表的長度有關 –