簡體   English   中英

JavaFX Combobox不會更改為第一次和第二次點擊的點擊值

[英]JavaFX Combobox doesn't change to clicked value from the first and second click

我有一個名為verreGcomboComboBox ,其中填充了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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM