【问题标题】:JavaFX Combobox doesn't change to clicked value from the first and second clickJavaFX Combobox 不会从第一次和第二次单击更改为单击值
【发布时间】:2017-04-20 22:32:29
【问题描述】:

我有一个名为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);

【问题讨论】:

    标签: java javafx combobox


    【解决方案1】:

    您必须为您的组合框添加一个 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("");
            }
        };
    });
    

    我希望这段代码能解决你的问题。

    【讨论】:

    • 它确实解决了它,但我不知道为什么其他组合框在没有 MouseEvent 处理程序的情况下工作,我认为这与项目列表的长度有关
    猜你喜欢
    • 1970-01-01
    • 2012-07-22
    • 1970-01-01
    • 2019-11-05
    • 1970-01-01
    • 2013-01-06
    • 1970-01-01
    • 1970-01-01
    • 2012-11-03
    相关资源
    最近更新 更多