ともさんのHP >プロブラミング >JavaFX >ダイアログ

JavaFXダイアログのサンプルプログラム

JavaFXアプリの進行中、確認や入力、選択が必要になった場合に表示するダイアログのサンプルプログラムです。
下の動画のように、メッセージ、2択、3択、テキスト入力、リストから選択の4つを作ってみました。
この4つがあればほとんどのケースをカバーできると思います。

広告


JavaFXダイアログの種類

3つの種類が用意されています。
Alert
TextInputDialog
ChoiceDialog
Alertが普通のタイプで、最もよく使うと思います。初期化時に並べるボタンを指定します。
サンプルではメッセージ、2択、3択のダイアログを作っていますが、Alertに設置するボタン楽天 の数を変えることで実現しています。
TextInputDialogはテキスト入力して、このテキストをプログラムに渡すもの。
ChoiceDialogはリストから1つ選ぶタイプです。

ダイアログ位置の設定

親ウインドウを動かしてからダイアログを表示させると、ダイアログが親から離れた場所に表示されてしまいます。
Stageの位置情報をDialogに渡してあげれば、Stage上にダイアログを表示させることができます。

 dialog.setX( stage.getX()+stage.getWidth()/2. -50 );
 dialog.setY( stage.getY()+stage.getHeight()/2. -50 );


サンプルプログラム

上の動画のソースは下記の通り。

package tomojavalib.swingfx;

import java.util.ArrayList;
import java.util.Optional;

import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Button;
import javafx.scene.control.ButtonType;
import javafx.scene.control.ChoiceDialog;
import javafx.scene.control.TextInputDialog;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.*;
import javafx.stage.Stage;

public class DialogFX extends Application {
Stage stage = null;
Button[] b = new Button[5];

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

 @Override
 public void start(Stage stage) throws Exception {
  this.stage = stage;
  stage.setTitle("JavaFX楽天 ");
  Vbox pane = new Vbox();
  Scene scene = new Scene(pane, 320, 240);
  b[0] = new Button("メッセージ");
  b[1] = new Button("二択");
  b[2] = new Button("三択");
  b[3] = new Button("テキスト入力");
  b[4] = new Button("選択");
  pane.getChildren().addAll( b );
  this.seEvent();
  stage.setScene(scene);
  stage.show();
 }

private void seEvent(){
 EventHandler<MouseEvent> mouseClick = ( event ) -> this.mouseClick( event );
 for(int i=0;i<b.length;i++){
  b[i].addEventHandler( MouseEvent.MOUSE_CLICKED , mouseClick );
 }
}

private void mouseClick( MouseEvent event ){
Button button = (Button)event.getSource();
String s = button.getText();
if( s.equals("メッセージ") ){
 Alert dialog = new Alert( AlertType.INFORMATION , "ご飯の時間です"  , ButtonType.YES );
 dialog.showAndWait();
}else if( s.equals("二択") ){
 //二択のダイアログ
 Alert dialog = new Alert( AlertType.NONE , "終了しますか?" , ButtonType.YES , ButtonType.NO );
 dialog.setX( stage.getX()+stage.getWidth()/2. -50 );
 dialog.setY( stage.getY()+stage.getHeight()/2. -50 );
 Optional<ButtonType> result = dialog.showAndWait();
 if (result.isPresent() && result.get() == ButtonType.YES) { System.exit(0); } else{ event.consume();}
}else if( s.equals("三択") ){
 //三択のダイアログ
 Alert dialog = new Alert( AlertType.NONE , "終了しますか?" , ButtonType.YES , ButtonType.NO , ButtonType.CANCEL );
 dialog.setX( stage.getX()+stage.getWidth()/2. -50 );
 dialog.setY( stage.getY()+stage.getHeight()/2. -50 );
 Optional<ButtonType> result = dialog.showAndWait();
 if (result.isPresent() && result.get() == ButtonType.YES) {
  System.exit(0);
 } else if (result.isPresent() && result.get() == ButtonType.NO) {
  event.consume();
 } else if (result.isPresent() && result.get() == ButtonType.CANCEL) {
  event.consume();
 }
}else if( s.equals("テキスト入力") ){
 //テキスト入力ダイアログ
 TextInputDialog dialog  = new TextInputDialog( "テキストを入力してください" );
 Optional<String> result = dialog.showAndWait();
 b[3].setText( result.get() );
}else if( s.equals("選択") ){
//選択ダイアログ
 ArrayList<String> list = new ArrayList<String>();
  list.add( "アヒル" );
  list.add( "イチゴ" );
  list.add( "ウドン" );
 ChoiceDialog<String> dialog = new ChoiceDialog<String>( list.get( 0 ) , list );
 Optional<String> result = dialog.showAndWait();
  b[4].setText( result.get() );
}
}

}

ダイアログのサイズ調整

ダイアログのサイズを設定するには、

dialog.getDialogPane().setPrefSize(300, 200);

というふうに記述する。

最終更新日: 2018-11-13 08:24:52

ともさんのHP >プロブラミング >JavaFX >ダイアログ

広告
新着ページ

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

他のサイト

3D-CAD
洋裁CAD

いいねなど

 RSS 

Author: Tomoyuki Ito

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