Because of the performance, Once a branch graph is made live or compiled the Java 3D rendering system converts the branch graph to a more efficient internal representation. At this time, we can't change any content in the branch graph unless the proper capability is set.

This program illustrates how to set the property capability for modifing the content of virtual world at runtime.

 public class ModifyRuntime extends JFrame {
  private BranchGroup scene=new BranchGroup();
  private BranchGroup content=new BranchGroup();;
  
  private JButton addBtn=new JButton("Add");
  private JButton removeBtn=new JButton("Remove");
  
  public ModifyRuntime() {
    GraphicsConfiguration config = SimpleUniverse
        .getPreferredConfiguration();
    Canvas3D canvas3D = new Canvas3D(config);

    content.addChild(new ColorCube(0.4));
    // Set the Capabilities that is need by adding and removing
    // the Cube
    scene.setCapability(BranchGroup.ALLOW_CHILDREN_EXTEND);
    scene.setCapability(BranchGroup.ALLOW_CHILDREN_WRITE);
    scene.setCapability(BranchGroup.ALLOW_DETACH);
    content.setCapability(BranchGroup.ALLOW_DETACH);
    
    // Compile the scene
    scene.compile();

    SimpleUniverse simpleU = new SimpleUniverse(canvas3D);

    simpleU.getViewingPlatform().setNominalViewingTransform();

    simpleU.addBranchGraph(scene);
    
    getContentPane().add(canvas3D,BorderLayout.CENTER);
    
    // Initialize GUI 
    addBtn.addActionListener(new ActionListener(){
      public void actionPerformed(ActionEvent arg0) {
        scene.addChild(content);
        addBtn.setEnabled(false);
        removeBtn.setEnabled(true);
      }
      
    });
    removeBtn.setEnabled(false);
    removeBtn.addActionListener(new ActionListener(){
      public void actionPerformed(ActionEvent arg0) {
        scene.removeChild(content);
        removeBtn.setEnabled(false);
        addBtn.setEnabled(true);
      }
      
    });
    JPanel panel=new JPanel();
    panel.add(addBtn);
    panel.add(removeBtn);
    getContentPane().add(panel,BorderLayout.SOUTH);
  }
  
  public static void main(String[] args){
    ...
  }
}