ともさんのHP >プロブラミング >JavaFX >SwingアプリにFXを追加

SwingアプリにFXを追加する方法

洋裁CADはSwingで記述してきた2次元CADですが、3D化するためにJavaFXを使うことにしました。
本来であれば全てFXで書きなおしてしまえばよいのですが、そんなに時間は持ち合わせていません。
全体のFX化はボチボチやっておくことにして、とりあえず、部分的にFXを使って3Dを表示できるように考えました。

広告

具体的にはSwingのフレームからFXのStageを呼び出し、データを渡したかったのですが...。

JframeからStageは開けない

やってみたらダメでした。
Jframeの中にjavafx.embed.swing.JFXPanelを置き、その中にSceneを配置。これで実現できました。
こちら を参考に作成しました。
構造はこんな感じになります。
JavaSwingからFX


実行結果

下のサンプルプログラムを実行すると下記のようになります。
親フレームをまず開き、そこからFX3D表示をするフレームを開いています。
JavaSwingからFX


サンプルプログラム

親フレーム

package tomojavalib.fx;

import java.awt.Color;
import java.awt.Dimension;

import javax.swing.Jframe;

public class Frame extends Jframe {

public Frame(){
 this.setSize(320,240);
 this.setVisible(true);
 this.setTitle("親フレーム");
 FxFrame fxframe = new FxFrame();


public static void main(String[] args) {
 Frame f = new Frame();
}

}

親フレームから呼び出される3D表示フレーム

広告


package tomojavalib.fx;

import javax.swing.Jframe;

import javafx.embed.swing.JFXPanel;
import javafx.geometry.Point3D;
import javafx.scene.Camera;
import javafx.scene.Group;
import javafx.scene.LightBase;
import javafx.scene.PerspectiveCamera;
import javafx.scene.PointLight;
import javafx.scene.Scene;
import javafx.scene.SubScene;
import javafx.scene.paint.Color;
import javafx.scene.shape.Box;
import javafx.scene.text.Font;
import javafx.scene.text.Text;

public class FxFrame extends Jframe {

public FxFrame(){
 this.setBounds(50,50,320,240);
 this.setTitle("FXフレーム");
 JFXPanel fxPanel = new JFXPanel();
 Scene scene = createScene();
 fxPanel.setScene(scene);
 this.add(fxPanel);
 this.setVisible(true);


private static Scene createScene() {
 Group group = new Group();
 //箱を置く
 Box box = new Box( 10 , 10 , 10 );
 box.setRotationAxis( new Point3D( 1.5 , 1.5 , 1.5 ) );
 box.setRotate( 45.0 );
 group.getChildren().add( box );
 // カメラを置く
 Camera camera = new PerspectiveCamera( true );
 camera.setTranslateZ( -50.0 );
 group.getChildren().add( camera );
 //点光源を置く
 LightBase light = new PointLight();
 light.setTranslateX(  30.0 );
 light.setTranslateY( -30.0 );
 light.setTranslateZ( -30.0 );
 group.getChildren().add( light );

 Scene  scene  =  new  Scene(group, Color.AQUA);
 scene.setCamera( camera );
return (scene);
}

}


FXフレームを閉じたのち再表示できない不具合対策

親フレームから子のFxフレームを呼び出し、これを閉じたあとに再び表示させようとすると開けないことに気づきました。
この場合、Mainの中に下記1文を入れると不具合を解消できます。

Platform.setImplicitExit(false);


最終更新日: 2019-02-06 08:16:04

ともさんのHP >プロブラミング >JavaFX >SwingアプリにFXを追加

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

庭園図集  
RPGゲーム風の服  
JavaFX基本コード  
木製プランターの自作  
各種Pane  
さくら草の栽培、手入れ、増やしかた  
2DSceneと3DSceneを同時に表示  
ラウンドアップを使って木を枯らす  
袴の作り方  
蜂舎のこと  
Raspberry Piを太陽電池に接続  

私の他のサイト

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

いいねなど

 RSS 

Author: Tomoyuki Ito

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