【发布时间】:2017-04-20 22:32:29
【问题描述】:
我有一个名为verreGcombo 的ComboBox 填充了Verre 类型的项目,我面临的问题是,当我想从中选择一个值时,它总是无法在第一次更改它的值第二次点击,有时甚至更多,所以我总是必须使用箭头来导航和选择项目,或者点击三次以上来选择一个项目。其他组合框不存在此问题(项目编号不超过 5),这是我的代码:
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);
【问题讨论】: