2

我在我的 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 {
            }
        }
    });
4

1 回答 1

2

您正在将进度指示器设置为不可见,并且不再使其可见。

而不是在负载工作状态更改侦听器中调用 setVisible(false),而是将进度指示器的可见性绑定到其进度量(在绑定 progressProperty 之后直接)。

pi.visibleProperty().bind(pi.progressProperty().lessThan(1));

这样,progress 属性只会在加载过程中显示,然后在页面加载时切换为不可见,然后在下一页加载过程中切换回可见等。(从你的问题出现对我来说是你想要完成的)。

我确实发现让进度指示器进出可见有点烦人,因此您可能需要重新考虑您的设计并使进度条始终保持不变(或者至少使其样式不显眼或执行淡入和淡出动画为了它)。

于 2013-09-20T18:04:59.750 回答