如何在javafx布局中嵌入java3d的Canvas3d?

时间:2016-01-28 05:37:58

标签: java swing javafx java-3d

我尝试使用Canvas3dStackPane中嵌入SwingNode。 我将Canvas3d放入JPanel,并将JPanel放入SwingNode。但只出现空Jpanel。 我在某个地方听说SwingNode只呈现纯粹的Swing。所以我使用了JCanvas3d而不是Canvas3d,但它也没有用! 有没有方法在javafx布局中嵌入Java3d的Canvas3d?如果不使用SwingNode,也没关系。

我的java版本是jdk 1.8_xx这是我的源代码

public class Main extends Application
{
public static void main( String[] args )
{
    launch( args );
}

@Override
public void start( Stage primaryStage )
{

    try
    {

        StackPane root = new StackPane();
        SwingNode swingNode = new SwingNode();

        root.setPrefSize( 400, 400 );
        root.setMinSize( 400, 400 );

        Scene scene = new Scene( root, 400, 400 );
        primaryStage.setScene( scene );
        primaryStage.show();
        root.setPrefSize( 400, 400 );

        root.getChildren().add( swingNode );

        SwingUtilities.invokeLater( new Runnable()
        {
            @Override
            public void run()
            {

                GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
                Canvas3D canvas = new Canvas3D( config );

                SimpleUniverse univ = new SimpleUniverse( canvas );
                univ.getViewingPlatform().setNominalViewingTransform();
                BranchGroup scene = createSceneGraph();
                scene.compile();
                univ.addBranchGraph( scene );

                JPanel panel = new JPanel();
                panel.add( canvas );

                swingNode.setContent( panel );

            }
        } );

    }
    catch ( Exception e )
    {
        e.printStackTrace();
    }
}

public BranchGroup createSceneGraph()
{
    BranchGroup branch = new BranchGroup();

    // Make a changeable 3D transform
    TransformGroup trans = new TransformGroup();
    trans.setCapability( TransformGroup.ALLOW_TRANSFORM_WRITE );
    branch.addChild( trans );

    // Make a shape
    ColorCube demo = new ColorCube( 0.4 );
    trans.addChild( demo );

    // Make a behavor to spin the shape
    Alpha spinAlpha = new Alpha( -1, 4000 );
    RotationInterpolator spinner = new RotationInterpolator( spinAlpha, trans );
    spinner.setSchedulingBounds( new BoundingSphere( new Point3d(), 1000.0 ) );
    trans.addChild( spinner );

    return branch;
}
}

0 个答案:

没有答案