2017-12-26 1 views
1

나는 많은 탭이 포함 된 탭 창이 있습니다 (분명히). 일반적으로 탭에서 setOnSelectionChanged()을 호출하여 각 탭에 리스너를 설정할 수 있습니다. 그러나 TabPane이 어떤 방식 으로든 재구성되는 경우 탭 패널은 목록의 첫 번째 탭을 자동으로 선택합니다. 이것은 마우스 클릭으로 탭이 선택되었는지 알 수있는 방법이 있는지 알고 싶습니다. 그래서 성능 문제가 발생했습니다. 분명히 탭에는 onMouseClick() 명의 청취자가있을 수 없습니다.JavaFX 마우스 클릭이 트리거되었는지 확인하는 방법 탭 선택

+0

먼저 성능 문제를 해결할 가치가 있습니다. – trashgod

+0

그래, 지난 2 일 동안 그렇게 해보려고했지만 상당한 개선이 있었지만 여전히해야 할 일이 있습니다. 이것은 나가 탐구하고 있던 도로이었다. 위의 작업을 수행하거나 탭 패널에서 처음부터 아무 것도 선택하지 않도록 할 수있는 방법이 있었으면 좋겠다. –

+0

보기에서 모델 문제를 해결하려고하는 것 같습니다. 대신 'javafx.concurrent.Worker'를 사용하고 관련 속성을 업데이트하여 탭 선택이 지연되지 않도록하십시오. – trashgod

답변

1

탭이 실제로 노드가 아니고 마우스 클릭 리스너가 없기 때문에 대답에 대한 해결책을 찾지 못해도 성능 문제가 해결되었습니다.

탭을 변경할 때 전체보기를 (게으르게) 다시 작성하고보기에 모델을 적용했습니다. 이로 인해 탭이 변경 될 때마다 약 140ms 이상의 지연이 발생했습니다. 올바른 탭을 찾기 위해 검색 상자를 구현할 때 큰 문제였습니다. 탭이 검색에서 다시 만들어지기 때문에 탭 선택이 변경되면보기가 다시 만들어지기 때문입니다 (탭 창은 새 탭을 추가 할 때 첫 번째 탭을 자동으로 선택합니다.).

궁극적으로 설계자는 컨트롤러가 뷰를 한 번 만들고 뷰를 다시 만들지 않고 탭을 변경 한 것처럼 모델을 뷰포트에 연결하는 것으로 변경되었습니다.

나는 매우 당신은 성능 문제가 발생하고 MVC/자바 FX 프로그래밍 비교적 새로운 있다면이 게시물을보고 추천 :

Scene loads too slow

현재 탭이 약 상당한 개선이 15ms의을 변경 !

관련 문제