본문 바로가기

JavaFX

[JavaFX] JavaFX ComboBox 데이터 추가 변경 이벤트

JavaFX ComboBox 데이터 추가 및 이벤트 핸들러

 

JavaFX에서 ComboBox에 데이터를 추가하고 ComboBox 셀렉트 변경 시 이벤트 발생 처리 방법을 알아보자.

ComboBox를 컨트롤러에서 객체를 생성하는 방법과 scene builder를 사용하여 fxml로 UI를 그리고 컨트롤러에서 조작하는 방법이 있는데

나는 후자로 하려고 한다.

최대한 화면과 컨트롤러를 분리시키기 위해서이다.

이벤트 발생을 onAction이벤트를 사용하는 방법과 comboBox에 addListener를 추가하는 방법 두가지 방법이 있다.

 

 

ComboBox UI 생성

우선 fxml에서 ComboBox를 추가하고 fx:id 와 onAction 이벤트를 추가한다.

 

<AnchorPane>
  <children>
    <ComboBox fx:id="use" onAction="#useHandleChange" />
  </children>
</AnchorPane>

 

 

ComboBox 데이터 생성

ComboBox에 데이터를 넣기 위해 ObservableList<String> useData 변수를 생성한다.

FXCollection.observableArrayList로 ComboBox에 들어갈 값을 넣는다.

DB데이터 조회된 값을 입력하려면 String 배열로 값을 넣어주어도 된다.

 

ComboBox 변경 이벤트

1. ComboBox에 addListener이벤트로 changed이벤트를 등록하는 방법

2. fxml에서 onAction이벤트 useHandleChange 을 @FXML로 등록하고 ActionEvent로 처리하는 방법

첫번째 방법으로는 ComboBox에서 기존 셀렉트된 정보와 변경된 정보를 둘다 알 수 있고,

두번째 방법은 ComboBox 객체에 접근해서 선택된 콤보박스의 정보를 알아낼 수 있다.

둘 중 편한 방법으로 사용하면 좋을 듯 하다.

 

public class ComboBoxController implements Initializable {
  @FXML
  private ComboBox<String> use;
  
  ObservableList<String> useData;
  
  @Override
  public void initialize(URL location, ResourceBundle resources) {
    useData = FXCollections.observableArrayList("Y", "N");
    use.setItems(useData);
    useAuth.setValue("Y");
    
    use.valueProperty().addListener(new ChangeListener<String>() {
      @Override
      public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
        System.out.println(observable + ", " + oldValue + ", " + newValue);
      }
    });
  }
  
  @FXML
  private void useHandleChange(ActionEvent event) {
    System.out.println(use.getSelectionModel().getSelectedItem() + ", " + use.getSelectionModel().getSelectedIndex());
  }
}