2016-09-28 2 views
0

새 총을 추가하는 데 도움이되는 양식에 대한 도움이 필요합니다. 나는 그들 중 하나 (칼리버, 메이커, 타입)를 원한다면 내가 그 값을 하나 선택하면, 그들 중 하나는 텍스트 에디터 (ControlFX-textfields)를 가지고있다. 해당 모델에 해당하는 값은 다음과 같습니다. 모델에서 PT100을 선택하고 구경이 ".40", 유형이 "PISTOL", 제조업체가 "TAURUS"를 얻습니다. 내 모델은 모두 db로 설정했습니다. 문제는 모델에 구경, 유형 또는 제조 업체 중 하나의 값이 더 많은 경우입니다 (예 : 모델 "CBC", "퓨마", "라이플"). 가능한 2 구경 인 ".38"및 "357". 지금은 구경의 콤보 상자에 대한 다음을 시도했습니다 :사용자가 다른 콤보 상자에서 값을 선택할 때 콤보 상자 값을 설정하는 방법

modelo.getSelectionModel().selectedItemProperty().addListener(new ChangeListener() { 
     @Override 
     public void changed(ObservableValue observable, Object oldValue, Object newValue) { 

      List<Modelo> list = listModelo.stream().filter(m -> m.getModeloNome().equals(newValue)) 
        .collect(Collectors.toList());     

       for(Modelo a: list){ 
        if(list.size() == 1){ 
         calibreBox.setValue(a.getCalibre()); 
         tipoBox.setValue(a.getTipoArma()); 
         marcaBox.setValue(a.getMarcaArma()); 
        }if(list.size()> 1){ 
         System.out.println(a.getCalibre()); 
         calibrelist.clear(); 
         List<String> cal = new ArrayList<>(); 
         cal.add(a.getCalibre()); 
         calibrelist = FXCollections.observableList(cal); 

       } 
      } 

     } 
    }); 

하나의 모델 만있는 경우에는 전혀 문제가 없습니다. 또한 달성하고자합니다 : 내 데이터베이스에 존재하지 않는 모델을 입력하면 다른 콤보는 db의 기존 값을 유지해야합니다.

이 모든 작업을 수행하는 가장 좋은 방법은 무엇입니까 ???

+0

예를 들어 모델에 가능한 두 개의 구경이있는 경우 목록에 동일한 모델이 두 개 있습니다. 옳은? 총에 두 가지 구경이있을 때 정확히 무엇을하고 싶습니까? 먼저 구경 값을 설정 하시겠습니까, 아니면 콤보 상자의 옵션 목록에 추가 하시겠습니까? –

+0

기존 ObservableList를 지운 다음 설정하지 않고 두 구경을 추가하고 싶습니다. 그런 다음 사용자가 하나를 선택합니다. –

답변

0

calibrelist = FXCollections.observableList(cal);을 수행하여 calibreList를 다시 인스턴스화하려고하면 문제가 발생합니다. calibreList가 caliberComboBox.setItems(calibreList);을 수행하여 ComboBox에 추가 된 ComboBox의 항목을 포함하는 목록 인 경우 다시 인스턴스화하는 대신 원본 목록을 조작해야합니다.

그래서 대신 calibrelist = FXCollections.observableList(cal);

calibrelist.add(a.getCalibre);

참고 그런데 comboBox.setItems(calibreList)comboBox.getItems().addAll(calibreList)의 차이점을한다. setItems(calibreList)을 수행하면 나중에 해당 참조를 사용하여 calibreList을 조작 할 수 있습니다. calibreList.add(".357");을 수행하여 ComboBox에 항목을 추가하십시오. 그러나 getItems().addAll(calibreList), the items in을 사용하는 경우 calibreList will be copied to the list in the ComboBox instead, and its connection to calibreList will be lost, and you will need to add items to the list using getItems(). add()

+0

두 항목의 새 목록이 있기 때문에 다시 구두 목록을 인스턴스화합니다. "new gun"형식으로 호출하면 calibreBox는 다음 구경을로드합니다. (".38", "357", ".40", "380", "9mm", "12", "7.62", "5.56") if 예 사용자가 "푸마"모델을 선택하고, 사용자가 하나 또는 다른 것을 선택하기 위해 caliberBox를 (".38", "357")이되기를 원합니다. 나는 당신의 좋은 팁을 가지고 놀았지만, 내 문제를 해결하지 못했습니다, 나는 필터가 필요하다고 생각합니다. 감사. –

+0

여기에 문제가 표시되지 않습니다. 'ComboBox'인 caliberBox에 두 개의 옵션 (예 : ".38"과 "357"은 목록에서 다른 항목을 제거하는 것입니다. 두 항목만으로 새로운 목록을 만들 수 있고,'calboBox.setItems()'를 실행하여'ComboBox'의 목록으로 설정할 수 있습니다. 아니면'calibouseBox.getItems(). clear()'를 사용하여'ComboBox'를 지우고'caliberBox.getItems(). add (". 38")'를 실행하여 하나씩 추가하여 새로운 아이템을 추가 할 수 있습니다. –

+0

여전히 문제를 이해할 수없는 경우 더 나은 도움을 얻으려면 [MCVE] (http://stackoverflow.com/help/mcve)로 게시물을 편집하고 싶을 수 있습니다. –

관련 문제