ともさんのHP >プロブラミング >JavaFX >アプリ終了時にダイアログを表示

アプリ終了時にダイアログを表示するサンプルプログラム

ウインドウ(Stage)右上の×ボタンを押してプログラムを終了するとき、 データを保存していない場合は閉じずにダイアログ(Alert)を表示して確認するサンプルプログラムを紹介します。

広告


JavaFXではsetOnCloseRequesを使う

JavaFXの場合 stageのsetOnCloseRequest内で記述する。
下の1行を追記すると、×ボタン楽天 を押しても終了できなくなります。

stage.setOnCloseRequest((WindowEvent event) -> { event.consume(); } );

データのの保存状況を示すフラグ(file)を作っておき、保存していればそのまま終了、未保存であればダイアログを開くには、下記のように記述します。

  stage.setOnCloseRequest((WindowEvent event) -> {
   //ファイルの状態で場合分け
   if( file == false ){
   Alert alert = new Alert( AlertType.CONFIRMATION , "データが保存されていません。終了しますか?" , ButtonType.YES , ButtonType.NO );
   ButtonType button  = alert.showAndWait().orElse( ButtonType.CANCEL );
   System.out.println( button.getText() );
   //はいボタンが押されたら終了、いいえなら終了せずに戻る
   if(
    button.getText().equals("はい") ){ System.exit(0); }
   else{
    event.consume();
   }
  }else{ System.exit(0); }
 });


サンプルプログラム

JavaFXサンプル動画

下のプログラムを実行画面が上の動画です。 ×ボタンをクリックするとファイルの状態によってダイアログを表示させ、終了前の確認ダイアログを表示させています。
選択ボタンがいいえなら終了せずに元に戻り、はいなら終了します。

package tomojavalib.fx;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.ButtonType;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.layout.*;
import javafx.stage.Stage;
import javafx.stage.WindowEvent;

public class EndTest extends Application {
boolean file = false;

 public static void main(String[] args) {
  Application.launch(args);
 }

 @Override
 public void start(Stage stage) throws Exception {
  BorderPane pane = new BorderPane();
  Scene scene = new Scene(pane, 320, 240);

  stage.setOnCloseRequest((WindowEvent event) -> {
   //ファイルの状態で場合分け
   if( file == false ){
   Alert alert = new Alert( AlertType.CONFIRMATION , "データが保存されていません。終了しますか?" , ButtonType.YES , ButtonType.NO );
   ButtonType button  = alert.showAndWait().orElse( ButtonType.CANCEL );
   System.out.println( button.getText() );
   //はいボタンが押されたら終了、いいえなら終了せずに戻る
   if(
    button.getText().equals("はい") ){ System.exit(0); }
   else{
    event.consume();
   }
  }else{ System.exit(0); }
 });

  stage.setScene(scene);
  stage.show();
 }
}


JavaSwingの場合

JavaSwing終了確認

Swingでは、まず×ボタンを押しても閉じない設定にしておき、

this.setDefaultCloseOperation(Jframe.DO_NOTHING_ON_CLOSE);

windowClosingイベントの中でダイアログを表示さます。

class frameClose implements WindowListener{
public void windowIconified(WindowEvent e){}
public void windowActivated(WindowEvent e){}
public void windowDeiconified(WindowEvent e) {}
public void windowOpened(WindowEvent e){}
public void windowDeactivated(WindowEvent e) {}
public void windowClosing(WindowEvent e){
if(Frame.this.filejoutai==2){
int ans = JOptionPane.showConfirmDialog(Frame.this, "保存していません。本当に終了しますか?","ファイル保存確認",0);
if(ans == JOptionPane.YES_OPTION) {System.exit(0);}
}else{ System.exit(0); }
}
public void windowClosed(WindowEvent e){
}
}


広告

JavaSwingのサンプルプログラム

{
 //サイズ設定
 this.setBounds(500, 500, 320, 240);
 //イベントの設定
 this.setEvent();
}

private void setEvent()
{
 //×ボタンを押しても何もしない
 this.setDefaultCloseOperation(Jframe.DO_NOTHING_ON_CLOSE);
 //ウインドウ関連イベント
 addWindowListener(new frameClose());
}

public static void main(String[] args) {
 EndTestSwing ets = new EndTestSwing();
 ets.setVisible(true);
}

class frameClose implements WindowListener{
 public void windowIconified(WindowEvent e){}
 public void windowActivated(WindowEvent e){}
 public void windowDeiconified(WindowEvent e) {}
 public void windowOpened(WindowEvent e){}
 public void windowDeactivated(WindowEvent e) {}
 public void windowClosing(WindowEvent e){
  if(EndTestSwing.this.file==false){
   int ans = JOptionPane.showConfirmDialog(EndTestSwing.this, "保存していません。本当に終了しますか?","ファイル保存確認",0);
   if(ans == JOptionPane.YES_OPTION) {System.exit(0);}
  }else{ System.exit(0); }
 }
 public void windowClosed(WindowEvent e){
 }
}

}

最終更新日: 2017-12-12 09:30:30

ともさんのHP >プロブラミング >JavaFX >アプリ終了時にダイアログを表示

このエントリーをはてなブックマークに追加
広告
おすすめ記事
新着ページ

JavaFX Alertダイアログを最前面  
薪ストーブの掃除  
ウエストポーチを作りました  
USBカメラをJAVAで制御  
男の洋裁  
トマト抑制栽培  
JavaFX StageStyle  
ニホンミツバチ用観察巣箱の図面  
さくら草の栽培、手入れ、増やしかた  
ツールチップの表示  
JavaFXでWEBブラウザ  

私の他のサイト

ともさんの箱庭(ブログ)
家庭菜園
3D-CAD
洋裁CAD

いいねなど

 RSS 
PageSpeedInsights
html5チェック

Author: Tomoyuki Ito

このサイトの文章・写真の無断転載を禁じます