[英]JavaFX Combobox doesn't change to clicked value from the first and second click
我有一個名為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);
您必須向組合框添加一個EventFilter並偵聽鼠標的單擊,以便每當用戶使用鼠標單擊某個項目時就可以更改該值。 這是您必須添加才能解決該問題的代碼。
verreGcombo.addEventFilter(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() {
public void handle(MouseEvent 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("");
}
};
});
我希望此代碼能解決您的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.