hi...
ich will in meiner gui objekte(box) dynamisch hinzufügen und enfernen können...
hinzufügen is kein problem... das passt soweit... aber beim entfernen hab ich ein bug aus dem ich nicht schlau werde .... also erstmal der code....
es wird einfach für jedes element eine branchgroup(zum entfernen des objektes), und transformgroup erstellt....
desweiteren wird jeder hinzugefügten box ein name zugewiesen "box+nummer" die nummer ist wie ihr seht fortlaufend....
und der vollständigkeit halber noch mouseClicked...
das picking klappt wunderbar --> console gibt mir das gepickte objekt aus
so nun zum bug....
also wenn ich bei
das gepickte element hole(es ist wirklich das element ^^) und auf den vater vom vater (TG --> BG) verweis und diese branchgroup entfernen will klappt das nicht ... der macht einfach mal garnichts....
[/code] EDIT: hab mich geirrt.. das klappt auch nicht 
allergings klappt es wenn ich
in die callback-methode vom PickTranslateBehavior packe (also wenn ich ein objekt beweg verschwindet es -> so wie es beim funktionsaufruf passieren soll)
weiß wer rat ?
ich will in meiner gui objekte(box) dynamisch hinzufügen und enfernen können...
hinzufügen is kein problem... das passt soweit... aber beim entfernen hab ich ein bug aus dem ich nicht schlau werde .... also erstmal der code....
Java:
private BranchGroup createSceneGraph() {
.
.
.
pickC = new PickCanvas(c, rootBG);
c.addMouseListener(this);
}
Java:
public void newNode(){
String boxIdString = Integer.toString(boxId);
boxBG = new BranchGroup();
boxTG = new TransformGroup();
box= new Box(0.01f,0.01f,0.01f, boxAppearance);
box.setName("box"+boxIdString);
boxBG.setCapability(BranchGroup.ALLOW_DETACH);
boxTG.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
boxTG.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
boxTG.setCapability(TransformGroup.ENABLE_PICK_REPORTING);
boxTG.addChild(box);
boxBG.addChild(boxTG);
rootBG.addChild(boxBG);
boxId++;
}
es wird einfach für jedes element eine branchgroup(zum entfernen des objektes), und transformgroup erstellt....
desweiteren wird jeder hinzugefügten box ein name zugewiesen "box+nummer" die nummer ist wie ihr seht fortlaufend....
Java:
public void deleteNode(){
rootBG.setCapability(BranchGroup.ALLOW_DETACH);
//rootBG.removeChild(boxBG);
if (picktPrimitive != null){
System.out.println("zulöschendes Element: " + picktPrimitive.getName());
rootBG.removeChild(picktPrimitive.getParent().getParent());
}
else System.out.println("Nothing picked");
}
und der vollständigkeit halber noch mouseClicked...
Java:
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
//PickCanvas
pickC.setShapeLocation(e);
PickResult result = pickC.pickClosest();
if (result == null) {
System.out.println("Nothing picked");
}
else {
picktPrimitive = (Primitive)result.getNode(PickResult.PRIMITIVE);
// Shape3D s = (Shape3D)result.getNode(PickResult.SHAPE3D);
if (picktPrimitive != null) {
System.out.println(picktPrimitive.getName());
}
}
}
das picking klappt wunderbar --> console gibt mir das gepickte objekt aus
so nun zum bug....
also wenn ich bei
Code:
deleteNode()
Code:
wenn ich allerdings statisch auf das element boxBG verweis verschwindet es ... [code]//rootBG.removeChild(boxBG);
allergings klappt es wenn ich
Code:
rootBG.removeChild(boxBG);
weiß wer rat ?
Zuletzt bearbeitet: