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);
}
}
트릭을 해 주셔서 감사합니다. – Brian