Wird ein Cursortool nicht aus dem Menü oder einer Toolbox heraus aktiviert, sondern aus einem Plugin, so kann es passieren, dass das Bild des Mauszeigers (Cursor) nicht aktualisiert wird, obwohl die Funktion aktiviert wurde. Der Mauszeiger zeigt noch das alte Icon und wechselt erst nach dem ersten Klick zum Icon der Funktion.
Dies ist ein Problem des OpenJump-Frameworks, da wahrscheinlich nicht vorgesehen wurde, dass ein CursorTool durch ein anderes (Cursor-)tool aufgerufen wird. Dennoch können wir in Manuela dieses Problem beheben, indem wir das Maussymbol manuell schon einmal auf das Symbol setzen, das zu der Funktion gehört.
In diesem Beispiel aktivieren wir im „Bodendaten hinzufügen“-Plugin, das zum „Bodendaten-Projekt“ gehört, das ‚SoilDrawingTool‘. Wir erwarten, dass der Mauszeiger zu einem Stift wird (‚Pen.gif‘), doch wir müssen dies selbst einstellen:
![]()
Java, Beispiel aus: ‚…src\de\luh\iup\manuela\soiltype\cursorcreate\SoilCreatingViewFXController‘ |
---------- |
import javax.swing.ImageIcon;
import com.vividsolutions.jump.workbench.ui.images.IconLoader;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.Cursor;
import java.awt.Point;
…
ImageIcon imageIcon = new ImageIcon(IconLoader.class.getResource("Pen.gif"));
Image img = imageIcon.getImage();
Toolkit kit = Toolkit.getDefaultToolkit();
Cursor cursor = kit.createCustomCursor
(img, new Point(1, imageIcon.getIconHeight()-1), "myCursor");
swingToFxView.getContext().getLayerViewPanel().setCursor(cursor);
Zuerst wird das ImageIcon geladen. Diese Methode ist folgender OpenJump-Klasse ähnlich: ‚com.vividsolutions.jump.workbench.ui.images.IconLoader‘. Hier stehen 2 Optionen zur Verfügung:
![]()
(Die OpenJump-Icons befinden sich in folgendem Pfad: '…\src\com\vividsolutions\jump\workbench\ui\images'. Sie sind natürlich in der kompillierten Version von OpenJump enthalten, als auch in der Quelldatei mit Sources, z.B. ‚OpenJUMP-1.6.3-r3576-src.zip‘.)
Java, Beispiel |
---------- |
import de.luh.iup.manuela.base.ManuelaSettings;
…
ImageIcon imageIcon = new ImageIcon(this.getClass().getResource("../../icons/" + ManuelaSettings.KEY_ICON_FIELDATTRIBUTE_TOOL));
Dieser Befehl erstellt eine Referenz auf das Bild. Informationen über das Bild, z.B. Höhe und Breite bleiben jedoch nur in dem ImageIcon.
Erstellt eine Refernz auf das AWT-Toolkit. Den Maus-Cursor zu ändern ist also weder eine Funktion von Manuela, noch von OpenJump, sondern eine ganz allgemeine AWT-Funktionalität.
Mit Hilfe dieser AWT-Methode wird ein neuer Cursor erzeugt. Er verwendet das Image und definiert einen AWT-Point, der angibt, wo sich die Mausspitze im Bild befindet. Die hier verwendeten Koordinaten (1, imageIcon.getIconHeight()-1) passen genau zu dem ‚Pen.gif‘ und wurden durch Ausprobieren ermittelt. Der Name „myCursor“ spielt in diesem Zusammenhang keine Rolle und ist beliebig.
Der eben erzeugte Cursor wird nun einem einzelnen AWT-Panel hinzugefügt. Das bedeutet, in allen anderen Panelen ist es der normale Mauszeiger oder der an anderer Stelle definierte Mauszeiger. Da es in diesem Beispiel um den Stift geht, der im OpenJump-Projekt-LayerView-Fenster eingesetzt werden soll, ist das richtige Panel ‚…context.getLayerViewPanel()‘:
![]()
(Der grün markierte Teil ist das LayerView-Unterfenster des OpenJump Projekt-Fensters. Das OpenJump Projekt-Fenster ist das Fenster, das hier mit „Kronsberg_Bodentest 2015“ beschriftet ist.)
(Der Context ist der ‚com.vividsolutions.jump.workbench.plugin.PlugInContext‘.)
Es kann schwierig sein, gleichzeitig diese Funktion zu implementieren und den richtigen Pfad und Pfadtyp zu finden. Während der Entwicklung kann daher zunächst ein vordefinierter AWT-Cursor-Typ, z.B. der Handschuh verwendet werden:
![]()
Java |
---------- |
Cursor cursor = new Cursor(Cursor.HAND_CURSOR);
swingToFxView.getContext().getLayerViewPanel().setCursor(cursor);