2016-07-08 8 views
2

실제로 알려진 버그이며 스틸은 JavaFX 용 버그 보고서를 열었습니다.이 보고서는 here 일 수 있습니다.TableView.CONSTRAINED_RESIZE_POLICY를 사용할 때 잘못된 TableView 헤더 너비

설명은 다음과 같습니다 (수직 스크롤 볼 수 있습니다) 사용할 수있는 tableview의 높이에 맞지 않는 데이터는 다음 헤더 부적절한 폭이 한 ColumnResizePolicy이 CONSTRAINED_RESIZE_POLICY와 테이블에 잘 살고있다

- 만의 TableView이 집중되지 않을 때 . TableView가 포커스를 얻으면 헤더가 적절한 너비를 갖게됩니다.

문제는, 어떻게 든 고쳐야 할 필요가 있지만, 그렇게하기위한 해결 방법을 찾을 수 없습니다.

refresh() 을하고 그냥하고

otherGUIObject.requestFocus(); 
tableView.requestFocus(); //or getSelectionModel().Select(0)  
otherGUIObject.requestFocus(); 

또한

tableView.setColumnResizePolicy(TableView.UNCONSTRAINED_RESIZE_POLICY); 
tableView.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY); 

그러나 아무것도 작동하는 것 같다

에서 "점프"

나는 시도했다. 몇 가지 아이디어가 있습니까? 감사합니다.

답변

2

올바른 트랙에 있습니다 : TableViewrequestFocus()으로 전화해야합니다.

(질문)에서 다음 코드의 문제

otherGUIObject.requestFocus(); 
tableView.requestFocus(); //or getSelectionModel().Select(0)  
otherGUIObject.requestFocus(); 

컨트롤, 당신은 requestFocus()를 호출 할 때 NodefocusedProperty이 예상대로 true로 설정되어 있지만, 의미하지 않는다는 것입니다 사실 GUI (배치가 업데이트 됨)에 초점을 맞 춥니 다. JavaFX 응용 프로그램 스레드가 업데이트 할 때만 업데이트되기 때문입니다. 스 니펫에서는 한 번에 세 개의 requestFocus 호출을 만듭니다. 첫 번째 두 개가 최적화되어 마지막 명령어 만 실행됩니다 (대부분의 경우).

TableView에서 requestLayout 메서드를 호출하는 방법은 포커스가 GUI에서 포커스가 업데이트되었는지 확인한 후에 해결하는 것입니다. 그 다음에 다른 Node에 포커스를 설정할 수 있습니다 (예를 들어 focusOwnerPropertyScene을 사용하여 현재 어떤 Node이 선택되어 있는지 확인한 다음 TableView에 초점을 맞춘 후 다시 Node에 집중).

// The current focus owner on the Scene 
Node focusOwner = scene.getFocusOwner(); 

table.requestFocus(); 
table.requestLayout(); 

// Request focus on the currently focused Node 
if(focusOwner != null) 
    focusOwner.requestFocus(); 
else 
    // request focus on any Node you want 
    textField.requestFocus(); 
+0

멋진 대답. 고마워요! –

관련 문제