자바 FX ComboBox<T> ket, value 해결 방법
자바 FX로 개발 중 약간의 문제가 발생했다.
ComboBox에 객체를 넣어서 목록에서 보여주는 값과 목록을 선택했을 때의 값을 다르게 해주고 싶었다.
그래서 DB에서 객체를 조회 후 ComboBox에 넣을 때 ComboBox에 key, value식으로 값을 넣어서 보이는 값과 선택할 때
value값을 다르게 해주고 싶었지만, ComboBox<T>에는 두개의 값을 넣을 수 없었다.
그렇다고 객체를 그대로 넣게 되면 선택했을 때의 값을 객체에서 뽑아낼 수는 있지만,
목록에 보일때는 주소값으로 보이게 된다.
그래서 방법을 알아보다 이 상황에서 간단히 해결할 수 있는 방법을 알아냈다.
ComboBox<User> 에 DB에서 조회해온 객체를 그대로 add 해준다.
그럼 ComboBox에는 예상대로 객체의 주소값으로 보이게 될 것이다.
그럼 User 객체의 toString() 값을 name 값으로 볼 수 있게 하면 해결된다.
public class User(){
private String id;
private int seq;
private String name;
// Getter, Setter
...
@Override
public String toString(){
return this.getName();
}
}
ComboBox 선택
- getSelectionModel().getSelectedIndex() - ComboBox 선택된 index 번호
- getSelectionModel().getSelectedItem().getSeq() - ComboBox 선택된 객체의 정보 조회
@FXML private ComboBox<User> comboBox;
private List<User> userlIST
ObservableList<User> userData;
public void makeData(){
userData = FXCollections.observableArrayList();
userList = dao.select();
for(int i=0; i<userList.size(); i++){
userData.add(userList.get(i));
}
comboBox.setItems(userData);
}
@FXML
public void action(){
System.out.println(comBox.getSelectionModel().getSelectedItem().getSeq());
System.out.println(comBox.getSelectionModel().getSelectedIndex());
}