티스토리 뷰
[JavaFX] TableView 두번 Select 됬을 때 Select 해제하기(SelectionModel 수정)
rlawlstjd007 2017. 2. 28. 11:08TableView Select 두번 시 해제하기
이번 시간에는 JavaFX TableView의 Select 된 row를 한번더 Select 했을 때 해제 하는 방법을 알아보겠습니다. 뭔 소린지 이해가 가지 않으실 것 같아서 결과화면을 미리 준비했습니다. TableVeiw 사용법은 이전 포스트 를 참고 하시면 됩니다.
■ 예상 결과
위 사진 처럼 TableRow가 Select 되었는데 다시 한번 클릭 한 경우 Select 가 해제 되는 기능을 구현해볼 것 입니다. 어렵지 않습니다.
■ Controller
일단 어떤 방법으로 해결할지 생각해 볼까요? 테이블의 Row에 이벤트가 발생할 때 oldValue와 newValue와 비교를 해서 같으면 Select를 해제 하는 방법으로 해결하면 될 것입니다. 그렇다면 리스너를 달아야겠네요.
테이블뷰에 리스너를 다는 방법 중의 정석은 selectedItemProperty에 addHandler를 하는 방법이겠지만 아래 코드를 사용하게 되면 문제가 있습니다.
1 2 3 4 5 6 | myTableView.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<TableRowDataModel>() { @Override public void changed(ObservableValue<? extends TableRowDataModel> observable, TableRowDataModel oldValue, TableRowDataModel newValue) { //oldVlue와 newValue를 사용할 수 있지만 Select된 Row가 다시 눌리는 이벤트는 받지 못한다.. } }); | cs |
주석에도 설명 되었듯이 새롭게 Select된 Item에만 이벤트가 발생한다는 문제가 발생합니다. 그럼 사용하지를 못하겠죠.
이를 해결하기 위한 방법을 살펴보죠. 컨트롤러에 있는 tableView에 아래 코드를 추가하시면 됩니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | private Object oldValue; //Select 된 이전 값을 저장하기 위한 변수 myTableView.setOnMouseClicked(event -> { if(myTableView.getSelectionModel().getSelectedItem() != null) { if (event.getPickResult().getIntersectedNode().equals(oldValue)) { myTableView.getSelectionModel().clearSelection(); oldValue = null; } else { oldValue = event.getPickResult().getIntersectedNode(); } } }); | cs |
원리는 간단합니다. 이전에 Select된 값을 저장하기 위한 oldValue Object 변수를 선언하고 tableView에 클릭 이벤트가 발생할 때 oldValue와 새로 들어온 node Value가 같은지 검사하고 같으면 Selection 을 Clear하고 그렇지 않으면 oldValue에 값만 저장하는 원리 입니다.
다음 시간에는 좀 더 복잡한 다중 Selection을 구현하는 방법을 알아보겠습니다. 봐주셔서 감사합니다 :)
'프로그래밍 > JavaFX' 카테고리의 다른 글
[JavaFX] TableView Cell에 버튼(Control) 추가하기 (2) | 2019.10.17 |
---|---|
[JavaFX] System Clipboard에 Text 복사 (Ctrl + c 시에 내용 복사하기) (0) | 2019.02.13 |
[JavaFX] TableView 응용 ( TableView에 동적으로 데이터 추가 해보기 ) (4) | 2017.02.27 |
[JavaFX] TableView 이벤트 처리 (0) | 2017.02.23 |
[JavaFX] TableView Header 없애는 방법 (2) | 2017.02.23 |
- Total
- Today
- Yesterday
- 스프링부트
- intelij
- 자전거 여행
- 방통대 과제물
- JavaFX 종료
- JavaFX
- JavaFX Table View
- 자전거
- 텐트
- 이펙티브자바
- springboot
- 이펙티브 자바
- effectivejava
- JavaFX 테이블뷰
- Java UI
- windows
- 자바
- effective java
- 이펙티브
- JavaFX Window Close
- 배낭여행
- TableView
- 일본 자전거 여행
- 일본 배낭여행
- 일본여행
- 인텔리제이
- git
- java
- 일본 여행
- 배낭 여행
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |