Hallo,
ich habe in einem JTree mehrere Klassen d.h. die Wurzel ist von Klaase X und die Blätter sind von Klasse Y. Falls ein Blatt selbst Kinder hat sind diese von Klasse Z.
Der Baum könnte auch irgendwann noch mehrere Klassen bekommen.
Wenn ich nun im Baum mit Drag&Drop arbeite so dürfen nur Objekte einer Klasse auf Objete der selben Klasse gezogen werden.
Wie kann die die ganze Sache relativ dynamisch halten. Ich möchte verhindern, dass ich in der Methode „drag“ das Quell- und Zielobjekt mit dem Befehl „instanceof“ vergleichen muß. Käme ein neues Objekt hinzu, so müßte ich den Code immer erweitern was ich eigentlich nicht will. Jedes Objekt hat eine Methode „getHumanPresentableName“. Diese Methode muß beim Vergleich des Quell- und Zielobjekts immer aufgerufen werden.
Bisher habe ich folgendes gemacht:
In einer Methode ermittle ich welches Objet im Baum gezogen werden soll und erstelle dann eine Transferable-Objekt. Im Transferable-Objekt wird der gezogene Knoten als Typ-Objekt abgelegt. Zusätzlich muß ich dem Transferable-Objekt noch den Rückgabewert der Methode „getHumanPresentableName()“ übergeben.
TreePath path = tree.getSelectionPath () ;
DefaultMutableTreeNode draggedNode = ( DefaultMutableTreeNode ) path.
getLastPathComponent () ;
Object o = draggedNode.getUserObject () ;
if ( o instanceof X )
{
return new DefaultTransferHandler (
draggedNode, (( X )o).getHumanPresentableName() ) ;
}
else if ( o instanceof Y )
{
return new DefaultTransferHandler (
draggedNode, (( Y )o).getHumanPresentableName() ) ;
}
else
{
return null ;
}
Mein Wunsch wäre etwas in dieser Form:
TreePath path = tree.getSelectionPath () ;
DefaultMutableTreeNode draggedNode = ( DefaultMutableTreeNode ) path.
getLastPathComponent () ;
Object o = draggedNode.getUserObject () ;
Class clazz = o.getClass();
return new DefaultTransferHandler (
draggedNode, (( clazz )o).getHumanPresentableName() ) ;
Wie kann man dies machen ?
Gehen auch Abfragen wie : if( clazz instanceof Jlist )… oder wie prüfe ich ob zwei Objekte von der gleichen Klasse sind nicht ob der Inhalt gleich ist?
if ( clazz1 == clazz2 ) oder if ( clazz1.equals( clazz2 ))
Danke
Arni
