2015-01-27 1 views
1

저는 JavaFX로 일하기 시작했으며 브라우저를 '빌드'하려고합니다. 지금은 두 개의 탭이있는 TabPane이 있습니다. 하나의 탭에는 WebView가 있고 다른 탭에는 새 탭을 추가 할 수 있습니다. TabPane 위에는 Textfield가 있습니다. 인터넷 주소를 입력하면 선택한 탭에 웹 사이트를로드하려고합니다.JavaFX 탭에서 하위 (WebView)를 가져 오는 방법은 무엇입니까?

내 문제는 선택한 탭에서 Webview를 가져 오는 방법을 모른다는 것입니다. 선택된 Tab을 얻을 수 있었지만 WebView를 가져 오는 방법은 없습니다.

int index = TabPane.getSelectionModel().getSelectedIndex(); 
Tab selectedTab = TabPane.getTabs().get(index); 

답변

0

당신은 항상 selectedTab.getContent()를 호출 한 다음 오른쪽 요소에 도달 할 때까지 장면 그래프 계층 구조를 통해 아래로 탐색 할 수 있습니다. 예 : 당신의 탭의 내용이 BorderPane하고 WebView 중심에있는 경우 당신이 그래도 꽤 추한 코드

BorderPane selectedBorderPane = (BorderPane) selectedTab.getContent(); 
WebView selectedWebView = (WebView) selectedBorderPane.getCenter(); 

을 할 수 있고, 당신은 당신이 의미 레이아웃을 언제든지 변경, 재 작성해야 할 것이다 당신의 응용 프로그램을 유지하기가 어려워집니다.

더 좋은 방법은 적절한 범위 (탭 패널을 표시하는보기의 컨트롤러 또는 Java의 레이아웃을 수행하는 경우이를 포함하는 클래스)에서 현재 변수에 대한 변수를 만드는 것입니다 웹보기 : 당신은 웹보기가 포함 된 새 탭을 만들 때마다

private WebView currentWebView ; 

그런 다음에 리스너를 추가 탭의 selectedProperty :

Tab tab = new Tab(...); 
// ... 
WebView webView = new WebView(...); 
// ... layout, etc tab content, etc... 
tab.selectedProperty().addListener((obs, wasSelected, isNowSelected) -> { 
    if (isNowSelected) { 
     currentWebView = webView ; 
    } 
}); 

지금 currentWebView는 항상 현재 표시된 웹보기를 참조합니다. 시작시 표시되는 첫 번째 웹보기로 초기화해야합니다.

관련 문제