JavaFX Как получить детей (WebView) из вкладки?

1

Я только начал делать что-то с JavaFX, и я пытаюсь "создать" браузер. Прямо сейчас у меня есть TabPane с двумя вкладками. На одной вкладке есть WebView, а на другой вкладке можно добавить новые вкладки. Над TabPane является текстовое поле. Когда я вхожу в интернет-адрес, я хочу загрузить веб-сайт в выбранной вкладке.

Моя проблема в том, что я не знаю, как получить Webview внутри выбранной вкладки. Мне удалось получить выбранную вкладку, но у меня нет идеи о том, как получить WebView внутри нее.

int index = TabPane.getSelectionModel().getSelectedIndex();
Tab selectedTab = TabPane.getTabs().get(index);
Теги:
javafx

1 ответ

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 всегда ссылается на отображаемый в данный момент веб-просмотр. (Вам также нужно будет инициализировать его до первого веб-представления, отображаемого при запуске.)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню