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