Hallo Zusammen,
Vorweg:
Ich bin relativ neu in der Java-Programmierwelt und erst in Tuchfühlung mit Java3D. Ich hoffe, dennoch, dass mein BeispielCode-Lesbar ist (Mühe hab ich mir jedenfalls gegeben)
Danke für Euer Verständnis und Hilfeleistungen.
Was hab ich vor:
Ich hab ein GUI erstellt mit 3 Buttons, je nach dem welchen ich verwende, soll in der Scene ein Kreis, ein Kubus oder ein Cylinder erscheinen.
Mein Problem:
Also die 3 Buttons erstellen klappt, eine Scene mit einem Start-Objekt klappt auch.
Doch klappt es nun nicht, dieses Start-Objekt wieder zu löschen und durch ein neues zu ersetzen.
Meine Variante ergibt die Fehlermeldung:
Exception in thread "AWT-EventQueue-0" javax.media.j3d.RestrictedAccessException: Group: only a BranchGroup node may be removed at javax.media.j3d.Group.removeAllChildren(Group.java:403)
ich erkenne daraus, dass ich die removeAllChildren nicht verwenden darf, aber weiter komme ich nicht:-(
Frage an die "Profis":
hab ich einen vollständig falschen Ansatz gewählt?
Wie kann ich das Problem lösen?
Hab mich durch dieses und andere Foren durchgelesen aber bin auf keinen grünen Zweig gekommen...
Vielen Dank für Euer Hilfe.
Vorweg:
Ich bin relativ neu in der Java-Programmierwelt und erst in Tuchfühlung mit Java3D. Ich hoffe, dennoch, dass mein BeispielCode-Lesbar ist (Mühe hab ich mir jedenfalls gegeben)
Danke für Euer Verständnis und Hilfeleistungen.
Was hab ich vor:
Ich hab ein GUI erstellt mit 3 Buttons, je nach dem welchen ich verwende, soll in der Scene ein Kreis, ein Kubus oder ein Cylinder erscheinen.
Mein Problem:
Also die 3 Buttons erstellen klappt, eine Scene mit einem Start-Objekt klappt auch.
Doch klappt es nun nicht, dieses Start-Objekt wieder zu löschen und durch ein neues zu ersetzen.
Meine Variante ergibt die Fehlermeldung:
Exception in thread "AWT-EventQueue-0" javax.media.j3d.RestrictedAccessException: Group: only a BranchGroup node may be removed at javax.media.j3d.Group.removeAllChildren(Group.java:403)
ich erkenne daraus, dass ich die removeAllChildren nicht verwenden darf, aber weiter komme ich nicht:-(
Frage an die "Profis":
hab ich einen vollständig falschen Ansatz gewählt?
Wie kann ich das Problem lösen?
Hab mich durch dieses und andere Foren durchgelesen aber bin auf keinen grünen Zweig gekommen...
Vielen Dank für Euer Hilfe.
Java:
import com.sun.j3d.utils.universe.*;
import com.sun.j3d.utils.geometry.ColorCube;
import com.sun.j3d.utils.geometry.Cylinder;
import javax.media.j3d.*;
import javax.swing.JFrame;
import java.awt.GraphicsConfiguration;
import javax.swing.JPanel;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class TestLoeschenUndEinfuegen extends javax.swing.JFrame {
static TransformGroup objTrans = new TransformGroup();
public static void main(String args[]) {
JFrame fenster = new JFrame ("Java3D");
fenster.setVisible(true);
fenster. setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
//////Beginn GUI
JPanel drawingPanel= new JPanel(new BorderLayout());
drawingPanel.setPreferredSize(new java.awt.Dimension(500, 500));
fenster.add(drawingPanel);
JPanel panel= new JPanel();
Button aButton = new Button("Kreis");
Button bButton = new Button("Kugel");
Button cButton = new Button("Cylinder");
panel.add(aButton);
panel.add(bButton);
panel.add(cButton);
drawingPanel.add("North",panel);
aButton.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e){
TestLoeschenUndEinfuegen Aufrufen=new TestLoeschenUndEinfuegen();
Aufrufen.Loeschen();
Aufrufen.Quader();
}
}
);
bButton.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e){
TestLoeschenUndEinfuegen Aufrufen=new TestLoeschenUndEinfuegen();
Aufrufen.Loeschen();
Aufrufen.Kugel();
}
}
);
cButton.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e){
TestLoeschenUndEinfuegen Aufrufen=new TestLoeschenUndEinfuegen();
Aufrufen.Loeschen();
Aufrufen.Cylinder();
}
}
);
//////Ende GUI
///Beginn Universum erstellen
GraphicsConfiguration config =
SimpleUniverse.getPreferredConfiguration();
Canvas3D c = new Canvas3D(config);
SimpleUniverse univ = null;
univ = new SimpleUniverse(c);
univ.getViewingPlatform().setNominalViewingTransform();
univ.getViewer().getView().setMinimumFrameCycleTime(5);
drawingPanel.add("Center",c);
objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
BranchGroup objRoot = new BranchGroup();
objRoot.addChild(objTrans);
//Aufruf eines Objektes
TestLoeschenUndEinfuegen Aufrufen=new TestLoeschenUndEinfuegen();
Aufrufen.Quader();
// Have Java 3D perform optimizations on this scene graph.
objRoot.compile();
univ.addBranchGraph(objRoot);
fenster.pack();
}
public void Loeschen(){ //Objekte Löschen
objTrans.removeAllChildren();
}
public void Quader(){
objTrans.addChild(new ColorCube(0.1));
}
public void Kugel(){
objTrans.addChild(new ColorCube(1));
}
public void Cylinder(){
Appearance app = new Appearance();
app.setColoringAttributes(new ColoringAttributes (1,0,1,0));
Cylinder colorcube1=new Cylinder((float)12,5, app);
objTrans.addChild(colorcube1);
}
}