2017-12-13 22 views
2

나는 상태의 콤보 상자를 구축하는 다음과 같은 코드가 있습니다. 코드가 예상대로 작동하지만 자동 완성 기능이 제대로 작동하지 않습니다. 자동 완성이 예상 텍스트 대신 객체 ID를 반환하는 것 같습니다. 드롭 다운을 클릭하면 올바른 축약 된 상태 이름이 표시됩니다. 내가 어디로 잘못 가고 있니? TextField.bindAutoCompletion 반환 개체 ID

는 다음과 같이 GetStateList

private void buildStateCombo() { 
 
     List<StatesDTO> states = GetStateList.getStatesList(); 
 
     StateCombo.setItems(FXCollections.observableList(states)); 
 
     StateCombo.setEditable(true); 
 
     TextFields.bindAutoCompletion(StateCombo.getEditor(), StateCombo.getItems()); 
 

 
     /** 
 
     * StringConverter 
 
     */ 
 
     StateCombo.setConverter(new StringConverter<StatesDTO>() { 
 
      
 
      @Override 
 
      public String toString(StatesDTO object) { 
 
       if (object == null){ 
 
        return null; 
 
       } else { 
 
        return object.getStateShort(); 
 
       } 
 
       } 
 

 
      
 
      @Override 
 
      public StatesDTO fromString(String string) { 
 
       return DriverAddStateCombo.getItems().stream().filter(state -> 
 
        state.getStateShort().equals(string)).findFirst().orElse(null); 
 
      } 
 
     }); 
 
}
...

public class GetStateList { 
 

 
    public static List<StatesDTO> getStatesList() { 
 
     Database db = new Database(); 
 
     List<StatesDTO> statesList = new ArrayList<>(); 
 
     try { 
 
      String query = "SELECT stateID, stateCode FROM States"; 
 
      ResultSet statesRS = db.executeQuery(query); 
 
      while(statesRS.next()) { 
 
       StatesDTO statesdto = new StatesDTO(); 
 
       statesdto.setStateID(statesRS.getString(1)); 
 
       statesdto.setStateShort(statesRS.getString(2)); 
 
       statesList.add(statesdto); 
 
      } 
 
     } catch (SQLException ex) { 
 
      System.out.println(ex.getMessage()); 
 
     } 
 
     db.closeConnection(); 
 
     
 
     return statesList; 
 
    } 
 

 
}

그리고 StatesDTO

public class StatesDTO { 
 
    public SimpleStringProperty stateID = new SimpleStringProperty(); 
 
    public SimpleStringProperty stateShort = new SimpleStringProperty(); 
 
     
 
    public String getStateID() { 
 
     return stateID.get(); 
 
    } 
 

 
    public void setStateID(String stateIDStr) { 
 
     stateID.set(stateIDStr); 
 
    } 
 
    
 
    public String getStateShort() { 
 
     return stateShort.get(); 
 
    } 
 

 
    public void setStateShort(String stateShortStr) { 
 
     stateShort.set(stateShortStr); 
 
    } 
 
}

답변

3

나는이 작업을 통해 컬렉션에 직접 이름을 제공 할 수 있습니다.

TextFields.bindAutoCompletion(StateCombo.getEditor(), 
    StateCombo.getItems().stream().map(state -> 
    state.getStateShort()).collect(Collectors.toList())); 

나는

bindAutoCompletion(TextField textField, Callback> suggestionProvider, StringConverter converter)

같은 방법의 다른 서명 등을 시도하지만 그것이 작동 만들 수 없습니다.

참고 : ControlsFX 버전 8.40.12.

+1

트릭을 해 주셔서 감사합니다. – Brian