본문 바로가기

JavaFX

[JavaFX] 자바 fx ComboBox<T> key, value 값 설정?

자바 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());
}