ともさんのHP >プロブラミング >JavaFX >メニューバー

JavaFX/Swingメニューバー

JavaFXとSwingでメニューバーを表示するサンプルプログラムを紹介します。
メニューバーをJframeまたはPaneに設置し、メニューアイテムを選択したら、ラベルの文字を変更するようにしています。

広告


左がSwing、右がFXでの実行動画です。

Classの構造

どちらもメニューバー自体をClass化してその中にメニューとメニューアイテム、イベントを格納しています。
メニューバーの初期化時に親のJframeまたはApplicationを取り込むことで、イベントの対応を親のラベルに返します。

FXのサンプルプログラム

まずはApplicationクラス。
stageを作り、BorderPaneを置いて、そこにメニューバーClassとラベルを貼り付けます。
メニューを選ぶとラベルが書き換えられますが、これはメニューバーの方で行います。

package tomojavalib.swingfx;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.*;
import javafx.stage.Stage;

public class MenuBarTestStage extends Application {
public Label l = null;

 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);
  l = new Label("a");
  pane.setCenter(l);
  MenuBarTestFx  menuBar = new MenuBarTestFx( this );
  pane.setTop(menuBar);
  stage.setScene(scene);
  stage.show();
 }

}


MenuBarの拡張Classを作って、この中にMenu、MenuItem、イベントを格納します。
Applicationの中にいろいろ記述するよりすっきりするのでこの構成にしました。
メニューを作るには、MenuBarとMenu、MenuItemを作り、MenuBarにMenuを登録、MenuにMenuItemを登録、
そしてMenuItemにイベントを登録します。
JavaFXMenu

最初にこのMenuBarを設置する親Applicationを読み込んでいるので、イベント発生時にApplication内のラベルを書き換えることができます。

package tomojavalib.swingfx;

import javafx.event.ActionEvent;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuBar;
import javafx.scene.control.MenuItem;
import javafx.scene.control.SeparatorMenuItem;

public class MenuBarTestFx  extends MenuBar{
//親アプリ
MenuBarTestStage  ap = null;

//メニューバーに付けるメニュー
Menu menu1 = null;
Menu menu2 = null;

//メニューバーにつけるメニューアイテム
public MenuItem menuitem11 = null;
public MenuItem menuitem12 = null;
public MenuItem menuitem21 = null;
public MenuItem menuitem22 = null;

public MenuBarTestFx( MenuBarTestStage  ap ){
this.ap = ap;
this.setMenuBar();
}

/**
 * メニューバーにメニューを設置する
 */
public void setMenuBar(){

 //menu1にメニューアイテムを登録する
 menu1 = new Menu("ファイル");
 menuitem11 = new MenuItem("新規作成");
 menuitem11.addEventHandler( ActionEvent.ACTION , e -> this.event( menuitem11.getText() ) );
 menu1.getItems().add(menuitem11);
 menu1.getItems().add( new SeparatorMenuItem() );
 menuitem12 = new MenuItem("開く");
 menuitem12.addEventHandler( ActionEvent.ACTION , e -> this.event( menuitem12.getText() ) );
 menu1.getItems().add(menuitem12);

 //menu2にメニューアイテムを登録する
 menu2 = new Menu("設定");
 menuitem21 = new MenuItem("設定1");
 menuitem21.addEventHandler( ActionEvent.ACTION , e -> this.event( menuitem21.getText() ) );
 menu2.getItems().add(menuitem21);
 menu2.getItems().add( new SeparatorMenuItem() );
 menuitem22 = new MenuItem("設定2");
 menuitem22.addEventHandler( ActionEvent.ACTION , e -> this.event( menuitem22.getText() ) );
 menu2.getItems().add(menuitem22);

 //メニューバーにメニューを登録
 this.getMenus().add( menu1 );
 this.getMenus().add( menu2 );
}

//イベントの受付
private void event(String s){
 if ( s.equals( "新規作成" )) {
   ap.l.setText( "新規作成" );
  }else if ( s.equals( "開く" )) {
   ap.l.setText( "開く" );
  }else if ( s.equals( "設定1" )) {
   ap.l.setText( "設定1" );
  }else if ( s.equals( "設定2" )) {
   ap.l.setText( "設定2" );
  }
}

}


最終更新日: 2017-11-06 19:43:12

ともさんのHP >プロブラミング >JavaFX >メニューバー

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

JavaFXでPopupMenu  
メンズパンツとジーンズの型紙ダウンロード  
柿の木、剪定前後の比較写真  
ダイアログ  
原型型紙のダウンロード  
3D-CADでカバンの型紙  
和風コートの作り方  
ボタンやラベルの修飾方法  
アイコンの差し替え  
男性用原型製図のしかた  
今年も柿の剪定が終了  

私の他のサイト

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

いいねなど

 RSS 
PageSpeedInsights
html5チェック

Author: Tomoyuki Ito

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