Node Selection

Alles zu NetBeans als RCP-Platform

Moderator: wegus

Antworten
kamenz
Beiträge: 7
Registriert: 12.01.2008, 18:59

Node Selection

Beitrag von kamenz » 17.01.2014, 19:02

Hallo,

bastele schon lange an folgendem Problem. Habe eine TopComponent mit Panel in die ich per DnD von der Palette Daten (als Nodes verpackt) ziehe. Daneben gibt es einen BeanTreeView an welchen das "neue" Element/Node angehängt werden soll. Das anhängen am Ende des selektierten ParentNodes funktioniert problemlos. Ich möchte aber das neue Element hinter den selektierten Node im BeanTreeView hängen und das klappt nicht. In der TopComponent mit BeanTreeView habe ich einen PropertyChangeListener. Beim Selektieren im BeanTreeView liefert der auch wunderbar. Aber, wenn ich einen neuen Node anfüge, liefert er nur ein "nodeChange" ohne "newValue" und ohne "oldValue". Ist der Ansatz, den Anhängepunkt über den ExplorerManager zu setzen vielleicht falsch? Muss ich den selektierten Node zwischenspeichern und an mein Datenobject beim add neuer Daten mitliefern? Das wird dann aber ein sehr unschöner Code. Zuguterletzt soll dann auch noch der neue Node selektiert werden.

Hier mal der Ausschnitt des ChangeListeners, was aber nicht funktioniert.

Code: Alles auswählen

explorerManager.setRootContext(pn);
        final BeanTreeView view = (BeanTreeView) jScrollPane1;
        explorerManager.addPropertyChangeListener(new PropertyChangeListener() {

            @Override
            public void propertyChange(PropertyChangeEvent evt) {
                if (evt.getPropertyName().equals("selectedNodes")) {
                    Node[] nodes = explorerManager.getSelectedNodes();
                    for (Node node : nodes) {
                        view.expandNode(node);
                    }
                    firstcheck=true;
                }
                if (firstcheck&&evt.getPropertyName().equals("nodeChange")) {     //klappt so nicht                 
                    firstcheck=false;
                    Node firstnode = explorerManager.getSelectedNodes()[0];                    
                    Node parent = firstnode.getParentNode();
                    Node[] allChild =parent.getChildren().getNodes(true);                    
                    PicPartNode[] next=new PicPartNode[1];
                    for (int i=0;i<allChild.length;i++){
                        if (firstnode.equals(allChild[i])){
                            next[0]=(PicPartNode)allChild[i++];                            
                        }
                    }
                    try {
                        if (next!=null)explorerManager.setSelectedNodes(allChild);
                    } catch (PropertyVetoException ex) {
                        Exceptions.printStackTrace(ex);
                    }
                    
                }
            }
        });
Danke für jeden Tipp dazu.
Grüße

kamenz
Beiträge: 7
Registriert: 12.01.2008, 18:59

Re: Node Selection

Beitrag von kamenz » 18.01.2014, 19:27

Hallo Leute,

habe es doch noch hingekriegt. Aber bin mir nicht sicher, ob das so der richtige Weg ist. Am schwierigesten war es das neue Element zu selectieren. Hierzu habe ich an die TopComponent mit dem BeanTreeView einen LookupListener und einen PropertyListener implementiert. Der LookUpListener liefert mir das Dataobject zu dem Node. Daran hänge ich dann den PropertyListener on the fly. Dessen result nutze ich um den neuen Node zu selektieren. Nicht schön, aber funzt.

Grüße

Antworten