ともさんの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 >アプリ終了時にダイアログを表示

広告
新着ページ

AIを利用し、衣服のデザイン画から型紙を制作する方法  
2つのアパレル3D技術でひらくオーダーメイド生産の手法  
【洋裁型紙】前後身頃の肩の傾きは何故前身頃の方が傾いているのか  
電子追尾式天体写真撮影法  
日本ミツバチ巣箱の種類  
ドラフター(製図台)でソーイング  
日本ミツバチが逃亡  
カメさんの箱庭  
天体用デジタルカメラの構造と天体写真  
Javaで静止画像(Jpeg)を動画(Mov)に変換  
USBカメラをJAVAで制御  

他のサイト

3D-CAD
洋裁CAD

いいねなど

 RSS 

Author: Tomoyuki Ito

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