Saturday, February 12, 2011

Canvas3D not appearing in Swing window

I am attempting to insert a Canvas3D object inside a Swing JPanel, but the code doesn't seem to be working (i.e. nothing happens):

        Canvas3D canvas = new Canvas3D(SimpleUniverse.getPreferredConfiguration());
        SimpleUniverse universe = new SimpleUniverse(canvas);
        BranchGroup root = new BranchGroup();
        root.addChild(new ColorCube());
        universe.addBranchGraph(root);
        universe.getViewingPlatform().setNominalViewingTransform();
        canvasPanel.add(canvas);

What am I missing? The JPanel was created using NetBean's Visual Editor.

  • Canvas3D needs a size passed to it; setting the preferred configuration from SimpleUniverse is not enough. In my case, that meant this code:

            // 3D canvas initialization
            Canvas3D canvas = new Canvas3D(SimpleUniverse.getPreferredConfiguration());
            SimpleUniverse universe = new SimpleUniverse(canvas);
            BranchGroup root = new BranchGroup();
            root.addChild(new ColorCube());
            universe.addBranchGraph(root);
            universe.getViewingPlatform().setNominalViewingTransform();
            canvas.setSize(100, 100);
            canvasPanel.add(canvas);
  • Probably you have to set a layout manager on the panel, which automatically expands the child components to the full area. A JPanel has a FlowLayout by default, which does not expand the child components. You could try a BorderLayout instead by calling:

    canvasPanel.setLayout(new BorderLayout());
    
    Edward Z. Yang : Ah, that worked perfectly. Thank you!

0 comments:

Post a Comment