如何通过单击其他阶段的按钮在WebView中加载网页?

时间:2015-02-05 17:09:01

标签: webview javafx

我在使用JavaFX的浏览器上工作我想在FXMLFile1包含WebView的{​​{1}}中加载一个网页,只需点击Button中的FXMLFile2即可显示FXMLFile1中的页面我试过这段代码:

@FXML
 public void tabfirst (ActionEvent ee) throws IOException { //for the FXMLFile2's button text.


            Socket socket = new Socket();
    try {

        //open cursor
        panoo.setCursor(Cursor.WAIT);
        que.setCursor(Cursor.WAIT);
        bbb.setCursor(Cursor.WAIT);

        //do work

        WebEngine myWebEngine = web1.getEngine(); //this web view is in FXMLFile1
        myWebEngine.load("https://www.google.com");



    }
   catch (IOException e){
       final  Stage stg = new Stage();           
        stg.initModality(Modality.APPLICATION_MODAL);
        stg.initOwner(stg);
        stg.setTitle("Cannot connect to the internet /n Please Verify your connection internet");
        labelno.setText("Cannot connect to the internet...");

       //set cursor
         ancpa.setCursor(Cursor.DEFAULT);

   } finally{
       try{ socket.close(); } catch (Exception e){ }
       }

}

请注意,此类tabfirst位于Button的{​​{1}}中,两个FXML文件位于同一个控制器中。 所以,任何机构都可以告诉我我的代码有什么问题,并提前感谢!

1 个答案:

答案 0 :(得分:1)

我不认为你正在设置web1。我认为,因为2个FXML文件使用相同的控制器(编辑:我的坏,我误读/误解)你期望他们自动共享变量,他们不会!

当FXMLLoader加载FXML文件时,它每次都会创建一个 new 控制器实例。所以来自FXMLfile1的控制器实例并不知道FXMLfile2的控制器实例或其任何变量。

控制器之间有大约5种不同的信息共享方式:

  1. 最简单的就是在两者之间使用getter和setter。
  2. 同样相当简单的是绑定两者之间的属性。
  3. 您可以设置侦听器,然后通知他们更改。
  4. 使用消息总线。
  5. 使用注射。
  6. 您使用哪一个取决于各种因素,需要更多关于您要完成的内容的信息?

    选项1&的基本概要2看起来像这样:

    FXMLLoader  fxml1 = .....
    fxml1.load();
    ctrl1 = fxml1.getController();
    
    FXMLLoader  fxml2 = .....
    fxml2.load();
    ctrl2 = fxml2.getController();
    
    ctrl2.set????( ctrl1.get????() );  // get something from the one and set it in the other
    // if the value in ctrl1 changes it does not necessarily change in ctrl2
    
    ctrl2.property????().bind( ctrl1.property???? );  // ctrl2 binds to a property in ctrl1
    // if the value of the ctrl1 property changes it WILL also change in ctrl2