Hallo zusammen,
ich soll durch das Framework JGraphX einen Editor realisieren. Man kann auf Grafikobjekte klicken und in einem sich öffnenden Fenster die Attribute einer damit verknüpften Objektinstanz bearbeiten. Diese Funktionalitäten werden innerhalb der Klasse EditorActions des Frameworks implementiert.
Die Struktur sieht (vereinfacht) so aus:
Ich habe also die Klasse EditAction so angepasst, dass meine eigene Funktion extractProperties aufgerufen wird. Wichtig ist dabei, dass das Objekt value übergeben wird. Der Typ ist SignalFunction, diese Klasse habe ich selbst implementiert.
Der ActionListener ist einem Speichern-Button hinzugefügt.
Drumherum ist noch etwas Brimborium, was aber mit meiner eigentlichen Frage nichts zu tun hat. Wichtig erscheint mir nur die Schachtelung, weil das für Zugriffsrechte von Variablen ja von Bedeutung ist.
Mein Problem zeigt sich in Zeile 42, da ich auf den value wieder zugreifen müsste, um den Setter darauf anzuwenden.
[JAVA=42]setterMeth.invoke(value, new Object());[/code]
Eclipse meint dazu (bzw. das JDK):
Innerhalb der extractProperties rufe ich erfolgreich den zugehörigen Getter auf. Ich würde daher das Zugriffsproblem auf den ActionListener abstempeln.
Wenn ihr weitere Infos oder Erklärungen braucht, lasst es mich wissen. Ich steh nämlich grad aufm Schlauch.
Gruß Bruno
ich soll durch das Framework JGraphX einen Editor realisieren. Man kann auf Grafikobjekte klicken und in einem sich öffnenden Fenster die Attribute einer damit verknüpften Objektinstanz bearbeiten. Diese Funktionalitäten werden innerhalb der Klasse EditorActions des Frameworks implementiert.
Die Struktur sieht (vereinfacht) so aus:
Java:
public class EditorActions
{
public static class EditAction extends AbstractAction
{
public void actionPerformed(ActionEvent e)
{
BasicGraphEditor editor = getEditor(e);
if (editor != null)
{
mxCell cell = (mxCell) ((mxGraphComponent) e.getSource()).getGraph().getSelectionCell();
if (cell instanceof mxCell)
{
SignalFunction value = (SignalFunction) cell.getValue();
if (value instanceof SignalFunction)
{
extractProperties(value);
}
}
}
}
}
public static void extractProperties(SignalFunction value)
{
ActionListener alSave = new ActionListener()
{
@Override public void actionPerformed( ActionEvent e )
{
int setterPropCount = 0;
Method setterMeth = declaredSetters[setterPropCount];
if (setterMeth instanceof Method)
{
while (setterMeth!=null)
{
try
{
setterMeth.invoke(value, new Object());
}
catch (IllegalArgumentException s) {
s.printStackTrace();
} catch (IllegalAccessException s) {
s.printStackTrace();
} catch (InvocationTargetException s) {
s.printStackTrace();
}
}
}
}
};
}
}
Der ActionListener ist einem Speichern-Button hinzugefügt.
Drumherum ist noch etwas Brimborium, was aber mit meiner eigentlichen Frage nichts zu tun hat. Wichtig erscheint mir nur die Schachtelung, weil das für Zugriffsrechte von Variablen ja von Bedeutung ist.
Mein Problem zeigt sich in Zeile 42, da ich auf den value wieder zugreifen müsste, um den Setter darauf anzuwenden.
[JAVA=42]setterMeth.invoke(value, new Object());[/code]
Eclipse meint dazu (bzw. das JDK):
Innerhalb einer inneren Klasse kann nicht auf eine nicht-finale Variable value, die in einer anderen Methode definiert ist, verwiesen werden.
Innerhalb der extractProperties rufe ich erfolgreich den zugehörigen Getter auf. Ich würde daher das Zugriffsproblem auf den ActionListener abstempeln.
Wenn ihr weitere Infos oder Erklärungen braucht, lasst es mich wissen. Ich steh nämlich grad aufm Schlauch.
Gruß Bruno