Я только начал делать что-то с JavaFX, и я пытаюсь "создать" браузер. Прямо сейчас у меня есть TabPane с двумя вкладками. На одной вкладке есть WebView, а на другой вкладке можно добавить новые вкладки. Над TabPane является текстовое поле. Когда я вхожу в интернет-адрес, я хочу загрузить веб-сайт в выбранной вкладке.
Моя проблема в том, что я не знаю, как получить Webview внутри выбранной вкладки. Мне удалось получить выбранную вкладку, но у меня нет идеи о том, как получить WebView внутри нее.
int index = TabPane.getSelectionModel().getSelectedIndex();
Tab selectedTab = TabPane.getTabs().get(index);
Вы всегда можете вызвать 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
всегда ссылается на отображаемый в данный момент веб-просмотр. (Вам также нужно будет инициализировать его до первого веб-представления, отображаемого при запуске.)