我正在创建一个简单的天气应用程序
这是我的问题的详细信息:-
我有一个主控制器(GeoWeatherMain.java)。当 Appl 运行时,这个类(GeoWeatherMain.class)被加载,它加载一个 fxml 文件。下面是它的代码:-
Parent root = FXMLLoader.load(getClass().getResource("GeoWeatherMainUI.fxml"));
Scene scene = new Scene(root);
stage.setScene(scene);
stage.show();
现在,GeoWeatherMainUI.fxml 具有 BorderPane 对象实现。它由一个按钮(在左侧窗格中)组成,该按钮在单击时会在中心窗格内加载另一个 fxml 文件。GeoWeatherMainUI.fxml 的骨架如下所示:-
<BorderPane fx:id="MainBody" prefHeight="736.0" prefWidth="1140.0" xmlns:fx="http://javafx.com/fxml" fx:controller="geoweather.GeoWeatherUIActionHandlers">
.
.
<Button layoutX="91.0" layoutY="67.0" mnemonicParsing="false" onAction="#getCurrAndForecastWeatherCond" text="Get Weather Details" />
.
.
<BorderPane>
现在 GeoWeatherUIActionHandlers.java 是另一个处理不同按钮动作事件的控制器。下面是它的完整代码
public class GeoWeatherUIActionHandlers implements Initializable{
@FXML
BorderPane MainBody;
@FXML
Label LocName;/*LocName is fx id for a label*/
@FXML
private void getCurrAndForecastWeatherCond(ActionEvent event){
try{
Pane centerPane = FXMLLoader.load(getClass().getResource("WeatherDetails.fxml"));
MainBody.setCenter(centerPane);
/*LocName.setText("xyz");*/
}catch (IOException ex){
TextArea excep = new TextArea(ex.toString());
MainBody.setCenter(excep);
}catch(Exception e){
TextArea excep = new TextArea("Inside Exception : \n" + e.toString());
MainBody.setCenter(excep);
}
}
@Override
public void initialize(URL url, ResourceBundle rb){}
}
现在,如果我想用新值更新加载的 WeatherDetails.fxml 文件,该怎么做?我在上面注释的代码中尝试过。(LocName.setText(“xyz”))。但是,它不起作用(给出 NullPointerException)。
我浏览了 javafx @ docs.oracle.com 的完整文档。没运气。在这里我也没有得到答案。请指导。