问题
I try to embed Canvas3d
in StackPane
using SwingNode
.
I put Canvas3d
into JPanel
, and put JPanel
into SwingNode
. But only empty Jpanel
was appeared.
I heard in somewhere that SwingNode
is rendering only pure Swing. So I used JCanvas3d
instead of Canvas3d
, but it is not working too!
Is there any method to embed Java3d's Canvas3d
in javafx layout? It's okay if not use SwingNode.
My java version is jdk 1.8_xx And Here is my source code
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;
}
}
来源:https://stackoverflow.com/questions/35053596/how-can-i-embed-java3ds-canvas3d-in-javafx-layout