Так что в этом приложении. Я использую встроенный браузер Chrome (JxBrowser) для отображения веб-страницы. Я хочу отобразить экран загрузки, когда браузер не завершил загрузку / загрузку всех файлов для отображения веб-страницы.
У меня 2 просмотра браузера. Один для основного браузера (BrowserViewMain
), а второй только для отображения локального HTML (BrowserViewLoading
) для экрана загрузки.
Чтобы определить, начал ли браузер загружать веб-страницу, я использую событие JxBrowser navigation.on(NavigationStarted.class)
, а также проверьте, если !event.isSameDocument()
, и если да, я делаю BorderPane.setCenter(BrowserViewLoading)
.
. Чтобы определить, завершил ли браузер загрузку веб-страницы, я использую navigation.on(LoadFinished.class)
, и я также создаю таймер для переадресации/ перенаправить и сделать переход более плавным. Он ждет 800 мс, и если событие не вызывается снова, выполните BorderPane.setCenter(BrowserViewMain)
, чтобы отобразить основной браузер.
Переход работает отлично при тестировании на Mac. Вызов setCenter выполняет переход белого цвета, но на окнах он мигает черным в течение короткого периода времени.
Есть ли способ скопировать поведение mac на окнах?
Есть ли лучший способ сделать это?
Я попытался использовать стек стека и добавить 2 просмотра браузера и вызвать для них toFront()
и toBack()
, но он не работает должным образом.
@FXML private BorderPane fullScreen;
navigation.on(NavigationStarted.class, event -> {
if(!event.isSameDocument()){
Platform.runLater(new Runnable() {
@Override
public void run() {
fullScreen.setCenter(BrowserViewLoading);
return;
}
});
}
});
navigation.on(LoadFinished.class, event -> {
if (BrowserViewLoading.isVisible()){
try{
timer.get().cancel();
timer.set(new Timer());
} catch (Exception e) {
}
timer.get().schedule(
new TimerTask(){
@Override
public void run() {
Platform.runLater(new Runnable() {
@Override
public void run() {
fullScreen.setCenter(BrowserViewMain);
return;
}
});
}
},
800
);
}
}