ともさんの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を追加

広告
新着ページ

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

他のサイト

3D-CAD
洋裁CAD

いいねなど

 RSS 

Author: Tomoyuki Ito

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