ともさんのHP >プロブラミング >JavaFX >JavaFXでPopupMenu

JavaFXでPopupMenuを表示するサンプルコード

JavaFXでポップアップメニューを作成表示するサンプルプログラムです。
下の動画のように、普通のメニューと、階層構造を持ったメニューを作りました。
JavaFXPopupMenu動画 JavaFXポップアップメニュー動画

広告


手順

階層構造のない、普通のメニューの作る手順です。まずMenuItemを作ります。

  MenuItem[] menui = new MenuItem[4];
  menui[0] = new MenuItem( "定義" );
  menui[1] = new MenuItem( "抑制" );
  menui[2] = new SeparatorMenuItem();
  menui[3] = new MenuItem( "削除" );

次にContextMenuを作り、これにMenuItemを設定。

  ContextMenu menu = new ContextMenu();

  menu.getItems().addAll( menui );

表示させるPane等にマウスクリック時のイベントでメニューを表示するようにします。

 pane.addEventHandler( MouseEvent.MOUSE_CLICKED ,  e -> menu.show( pane , e.getScreenX() , e.getScreenY() ) );

最後にMenuItemが選択されたときのイベントを設定します。

 for(int i=0;i<menui.length;i++){
  menui[i].addEventHandler( ActionEvent.ACTION , e -> System.out.println( ((MenuItem)e.getSource()).getText()+"が選択されました" ) );
 }


サンプルプログラム

上の動画左は下記コードを実行したものです。

package tomojavalib.fx;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.*;
import javafx.stage.Stage;

public class PopupMenuTest extends Application {

 public static void main(String[] args) {
  Application.launch(args);
 }
 
 @Override
 public void start(Stage stage) throws Exception {
  FlowPane pane = new FlowPane();
  this.setPopupMenu( pane );
  Scene scene = new Scene(pane, 320, 240);
  stage.setScene(scene);
  stage.show();
 }
 
private void setPopupMenu( Pane pane ){
  // メニュー
  ContextMenu menu = new ContextMenu();
  MenuItem[] menui = new MenuItem[4];
  menui[0] = new MenuItem( "定義" );
  menui[1] = new MenuItem( "抑制" );
  menui[2] = new SeparatorMenuItem();
  menui[3] = new MenuItem( "削除" );
  menu.getItems().addAll( menui );
 
 for(int i=0;i<menui.length;i++){
  menui[i].addEventHandler( ActionEvent.ACTION , e -> System.out.println( ((MenuItem)e.getSource()).getText()+"が選択されました" ) );
 }
 pane.addEventHandler( MouseEvent.MOUSE_CLICKED ,  e -> menu.show( pane , e.getScreenX() , e.getScreenY() ) );
}
}


ツリー構造にする場合の手順

右動画のようにするには、ContextMenu、MenuItemに加え、Menuを用意します。
Menuがツリーの分岐の役割をします。MenuItemはMenuまたはContextMenuに格納します。

  ContextMenu menu = new ContextMenu();
  Menu menu1 = new Menu( "ルート" );
  Menu menu2 = new Menu( "子メニュー" );
  MenuItem[] menui = new MenuItem[6];
  menui[0] = new SeparatorMenuItem();
  menui[1] = new MenuItem( "定義" );
  menui[2] = new MenuItem( "抑制" );
  menui[3] = new MenuItem( "削除" );
  menui[4] = new MenuItem( "新規" );
  menui[5] = new MenuItem( "追加" );
  menu1.getItems().addAll( menu2, menui[0], menui[1], menui[2], menui[3] );
  menu2.getItems().addAll(  menui[4], menui[5] );
  menu.getItems().addAll( menu1 );

最終更新日: 2017-04-09 15:36:29

ともさんのHP >プロブラミング >JavaFX >JavaFXでPopupMenu

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

3Dシーンに2Dコントロールを表示  
井戸ポンプ  
ファイル選択ダイアログ  
UcanAccess導入覚書  
ともさんのHP  
タイムラプス撮影  
Raspberry Piを太陽電池に接続  
ラズパイ(Raspberry Pi)で電子工作  
茶室の平面図集  
ともさんの開発室  
シンプルなパネルラインワンピースの型紙と作りかた  

私の他のサイト

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

いいねなど

 RSS 
PageSpeedInsights
html5チェック

Author: Tomoyuki Ito

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