Clazz verwenden

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

Erstmal ohne Gewaehr:

Koenntest du nicht ein Interface implementieren,
das alle deine Klassen implementieren?
Dann koenntest du das machen:

IMyObject obj = (IMyObject) draggedNode.getUserObject ();
return new DefaultTransferHandler (
 draggedNode, obj.getHumanPresentableName());

Gehen auch Abfragen wie : if( clazz instanceof Jlist )…

In diesem Fall nein. Aber, falls du J L ist meinst, ja. :wink:

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 ))

if ((obj1 instanceof MyClass) && (obj2 instanceof MyClass))

oder

if (obj1.getClass().getName().equals(obj2.getClass().getName()))

Gruss, Patrick

He Patrick,

da hätte ich auch selbst darauf kommen können. Aber manchmal sieht man vor lauter Wald die Bäume nicht mehr.

Nochmals vielen Dank
Arni

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]