2017-04-20 18 views
1

verreGcomboという名前のアイテムが入力されているVerreのアイテムが入力されています。 1回目と2回目のクリックで値を変更できないことがあります。そのため、矢印を使用してアイテムを選択したり、アイテムを選択するのに3回以上クリックする必要があります。この問題は、(項目の数が5を超えていない)他のコンボボックスで存在していない、ここに私のコードは次のとおりです。JavaFX Comboboxが1回目と2回目のクリックからクリックされた値に変更されない

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); 

答えて

1

あなたが変更できるようにあなたにComboboxsを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(""); 
     } 
    }; 
}); 

このコードがあなたの問題を解決することを願っています。

+0

これは実際には解決しましたが、他のコンボボックスがMouseEventハンドラなしで動作する理由はわかりませんが、アイテムリストの長さと関係があると思います –

関連する問題