我在javaFX webview中添加了一个进度指示器。这默认情况下将谷歌页面作为加载页面。进度指示器直到加载谷歌主页工作正常。但是,当我访问谷歌搜索结果中的其他链接时,我希望进度指示器正常工作或显示。我在控制器类代码中的指示符仅适用于google主页。请在下面找到以下代码段供您参考。谢谢。
public class GoogleController implements Initializable {
@FXML
SplitPane sp;
@FXML
Label welcomeMsg1;
@FXML
Label welcomeMsg2;
@FXML
WebView webview;
@FXML
Label uname;
@FXML
Label status1;
@FXML
ProgressIndicator pi;
String url=null;
/**
* Initializes the controller class.
*/
@Override
public void initialize(URL url, ResourceBundle rb) {
// TODO
WebEngine webengine=webview.getEngine();
WebEngine webengine1=webview.getEngine();
webengine.load("http://www.google.com");
pi.progressProperty().bind(webengine.getLoadWorker().progressProperty());
webengine.getLoadWorker().stateProperty().addListener(
new ChangeListener<State>() {
public void changed(ObservableValue ov, State oldState, State newState) {
if (newState == State.SUCCEEDED) {
pi.setVisible(false);
status1.setText("");
} else {
}
}
});
答案 0 :(得分:2)
您正在将进度指示器设置为不可见,并且永远不会再次显示。
而不是在加载工作器状态更改侦听器中调用setVisible(false),而是将进度指示器的可见性绑定到其进度量(直接在绑定progressProperty之后)。
pi.visibleProperty().bind(pi.progressProperty().lessThan(1));
这样,progress属性只会在加载过程中显示,然后在页面加载时切换为不可见,然后在下一页加载过程中切换回可见等等(来自你的)问题在我看来是你想要完成的事情。
我确实发现进度指示器弹出可见性有点烦人,所以你可能想要重新考虑你的设计并使进度条保持持久(或至少使它的造型不引人注目或表现淡入和为它淡出动画。)