2017-12-13 4 views
2

私は状態のコンボボックスを構築する次のコードを持っています。コードは期待どおりに機能しますが、自動完成が正しく機能するようにはできません。オートコンプリートは、予想されるテキストの代わりにオブジェクトIDを返すようです。ドロップダウンをクリックすると、正しい短縮名が表示されます。どこが間違っていますか?TextField.bindAutoCompletionオブジェクトIDを返します

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

GetStateListは次のようになり...

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

1つの方法で、コレクションに直接名前を付けることができます。

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

Iは、

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

の方法の異なるシグネチャを、試みたが、私はそれを動作させることができませんでした。

注:ControlsFXバージョン8.40.12。

+1

トリックはありがとうございました。 – Brian

関連する問題