JavaFX 2では、Excelファイルを読み取ることでTableViewビーが作成されています。次のようになります。
identification cellcount calved
o0001 12345 false
o0002 65432 true
o0003 55555 false
...
ユーザーが[インポート]ボタンを押すと、すべてのレコードをデータベースに追加する必要があります。ただし、「分娩」フィールドの値が「true」の場合、ユーザーが分娩が発生した日付を指定する必要があるダイアログウィンドウを表示します。ここで大きな問題は、ダイアログウィンドウが開いたらすぐにforループのビーイングを一時停止したいということです。私の現在のコードでは、すべてのダイアログウィンドウが互いに積み重ねられています。
これは、FXMLをロードするDialogメソッドです。
public void showDialog(String sURL){
final Stage myDialog = new Stage();
myDialog.initStyle(StageStyle.UTILITY);
myDialog.initModality(Modality.APPLICATION_MODAL);
URL url = getClass().getResource(sURL);
FXMLLoader fxmlloader = new FXMLLoader();
fxmlloader.setLocation(url);
fxmlloader.setBuilderFactory(new JavaFXBuilderFactory());
try {
Node n = (Node) fxmlloader.load(url.openStream());
Scene myDialogScene = new Scene(VBoxBuilder.create().children(n).alignment(Pos.CENTER).padding(new Insets(0)).build());
myDialog.setScene(myDialogScene);
myDialog.show();
} catch (Exception ex) {
System.out.println(ex);
}
}
そして、これが私がテーブルローを処理するforループです:
@FXML
private void handle_ImportCowDataButton(ActionEvent event) {
Cows selectedCow;
for(ImportRow row: tblImport.getItems()){
selectedCow = null;
for (Cows cow : olCows) {
if (cow.getOfficial().equals(row.getCownumber())) {
selectedCow = cow;
}
}
if (selectedCow != null) {
if (row.getCalving()) {
//if cow exists and cow has calved, show dialog window loading addcalving.fxml
//then the for loop should wait until that dialog window is closed before continuing
Context.getInstance().setPassthroughObject(selectedCow);
Context.getInstance().showDialog("/GUI/calving/AddCalving.fxml");
}
} else {
//if cow does not exist, show dialog window loading addcow.fxml
//then the for loop should wait until that dialog window is closed before continuing
Context.getInstance().setPassthroughObject(selectedFarmer);
Context.getInstance().showDialog("/GUI/cow/AddCow.fxml");
}
}
}
setOnCloseRequest()
私の方法で作業するshowDialog()
ことはオプションですか?