我尝试使用Canvas3d
在StackPane
中嵌入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;
}
}