私はアプリケーションが起動するとデータでいっぱいにする必要があるTableViewを持つJavaFXアプリケーションを持っています。JavaFX 8でTableViewの作成をキャッチする方法
@FXML Parent myRoot;
@FXML TableView datTable<DataClass>;
private Stage theStage;
public EventHandler<WindowEvent> windowStarted = event -> {
theStage = (Stage)myRoot.getScene().getWindow();
getData();
};
protected void getData()
{
dataTable.setEditable(false);
.
// Call a SOAP service to get the data
.
}
:それが起動したら、それは(最初は)一部の列を作成するように私はテーブルビューオブジェクトを持って、私のコントローラで
private LayoutController theController;
@Override
public void start(Stage primaryStage)
{
try {
FXMLLoader fxmlload = new FXMLLoader(getClass().getResource("Sample.fxml"));
BorderPane root = (BorderPane)fxmlload.load();
Scene scene = new Scene(root,640,480);
scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
theController = (LayoutController)fxmlload.getController();
primaryStage.setTitle("Title Application");
primaryStage.addEventHandler(WindowEvent.WINDOW_SHOWN,theController.windowStarted);
primaryStage.setScene(scene);
primaryStage.show();
} catch(Exception e) {
e.printStackTrace();
}
}
、SampleControllerと呼ばれる:私は、次のようにアプリケーションを起動しています私はステージのWINDOW_SHOWNイベントが発生すると、コントロールが作成され、私はそれらで何かできると仮定していました。それは明らかにそうではありません。どうやら、FXMLを使って指定されたコントロールは、実際にはのメインアプリケーションウィンドウが作成された後にに作成されます。
windowStartedラムダが実行されると、getData()メソッドが呼び出されますが、WINDOW_SHOWNイベントが発生する前にdataTableが作成されていないようです。その結果、dataTableのメソッドのいずれかを呼び出そうとすると、NullPointerExceptionのエラーが発生します。
私はそのメソッドを使用できるように、dataTableが実際に作成されたときに捕捉する必要があります。これを行うにはいくつかの方法がありますか?誰かが助言してください
...
'@FXML TableView datTable;': "datTable"。そして、それを 'dataTable'として使います。これはタイプミスですか?これはどのようにしてコンパイルされますか?そうでない場合、おそらくFXMLファイルの 'fx:id'属性が(正しく)設定されていない可能性があります。 –
DVarga