JavaFX | ListView와 SelectionModel | SelectionModel

먼저번 예제에서는 setOnMouseClick으로 선택된 항목의 텍스트를 꺼내오기 위해서는 다음과 같은 처리를 해야 했다.

String obj = list1.getSelectionModel().getSelectedItem();

getSelectionModel이라는 것을 호출해서, 반환되는 인스턴스의 getSelectedItem라는 메소드를 호출한다. 이것으로 선택된 항목의 오브젝트를 얻어 올 수 있는 것이다. 이것은 ListView의 “SelectionModel"이라는 것을 이해하지 않으면 무엇을 하고 있는지 모를 것이다.

“SelectioModel"라고 하는 것은, 선택된 항목을 관리하는 “모델 클래스"이다. JavaFX에는 다양한 데이터를 관리하기 위해 “모델"이라는 개념을 도입하고 있다. 모델은 동적으로 조작하는 데이터를 관리하기위한 것이다.

선택된 항목은 SelectionModel라는 모델 클래스를 사용하여 관리된다. ListView의 “getSelectionModel"메소드를 호출하는 것으로, 그 ListView에 포함된 SelectionModel 인스턴스를 얻을 수 있다.

SelectionModel 클래스에는 선택 항목에 대한 다양한 메소드가 제공되어 있다. 여기에서는 “getSelectedItem"라는 메소드를 사용하고 있다. 이것은 선택된 항목의 인스턴스를 반환하는 메서드이다. 이것으로 항목의 객체를 얻고, 거기에서 표시된 텍스트 등을 꺼내 올 수 있다.

저장하는 값과 제네릭 형에 대해

ListView는 제네릭 형(Generic Type)을 지원하고 있다. 앞의 예제 코드를 보면 ListView의 값을 저장 필드가 다음과 같이 되어 있는 것을 볼 수 있다.

@FXML ListView<String> list1;

이처럼 <String>을 추가하는 것으로, 저장하는 값을 String으로 제한 할 수 있다. getSelectedItem에서 값을 직접 String 변수에 할당한 것도 제네릭 형을 사용했기 때문이다.