我在使用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文件位于同一个控制器中。
所以,任何机构都可以告诉我我的代码有什么问题,并提前感谢!
答案 0 :(得分:1)
我不认为你正在设置web1。我认为,因为2个FXML文件使用相同的控制器(编辑:我的坏,我误读/误解)你期望他们自动共享变量,他们不会!
当FXMLLoader加载FXML文件时,它每次都会创建一个 new 控制器实例。所以来自FXMLfile1的控制器实例并不知道FXMLfile2的控制器实例或其任何变量。
控制器之间有大约5种不同的信息共享方式:
您使用哪一个取决于各种因素,需要更多关于您要完成的内容的信息?
选项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