SWT: Browser + Mouseposition

thommy1975

Grünschnabel
Hallo Wissende,

ich habe folgendes Problem:
Im Rahmen meines Praktikums habe ich folgende Aufgabenstellung erhalten: Ich sollte eine graf. Oberfläche mit dem SWT und Einbettung eines Browser-Objektes erzeugen. Dannach per URL auf einen Map-Server zugreifen und das entsprechende Template (eine HTML-Datei) anzeigen lassen. Hat soweit alles super geklappt --- ABER NUN soll ich über die Mouseposition die entsprechenden Koordinaten in Textfeldern darstellen. Wie ermittle ich überhabt die jeweilige Mose-Position über dem Browser-Objekt? Dannach kann ich ja erst mit der Koordinatenumrechnung beginnen. Bin schon voll am verzweifeln, da ich ja erst Java / SWT - Neueinsteiger bin HILFFFEE!

Danke im Voraus
 
Hallo,

hui, dass ist gar nicht so einfach, da das Browser Widget scheinbar keine MouseMoveEvents schickt...

schau mal hier:
(Aus einem anderen Thread)
Java:
/**
 * 
 */
package de.tutorials;

import java.util.concurrent.Executors;

import org.eclipse.swt.SWT;
import org.eclipse.swt.browser.Browser;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

/**
 * @author Tom
 */
public class SWTBrowserMouseCoordinatesExample {

  /**
   * @param args
   */
  public static void main(String[] args) {
    final Display display = new Display();
    Shell shell = new Shell(display);

    shell.setLayout(new FillLayout());
    shell.setText("SWTBrowserMouseCoordinatesExample");
    final Browser browser = new Browser(shell, SWT.NONE);
    browser.setUrl("http://www.tutorials.de");

    Executors.newSingleThreadExecutor().execute(new Runnable() {
      public void run() {
        Point oldCursorLocation = null;
        while (true) {
          final Point[] point = new Point[1];
          display.syncExec(new Runnable(){
            public void run() {
              point[0] = display.getCursorLocation();
            }
          });
          final Point currentCursorLocation = point[0]; 
          if (null != oldCursorLocation && !currentCursorLocation.equals(oldCursorLocation)) {
            
            display.syncExec(new Runnable(){
              public void run() {
                point[0] = display.map(null, browser, currentCursorLocation);
              }
            });
            
            Point cursorLocatitonWithinBrowserWidget =point[0]; 
            System.out.println(currentCursorLocation +" -> " + cursorLocatitonWithinBrowserWidget);
          }
          oldCursorLocation = currentCursorLocation;
        }
      }
    });

    shell.open();

    while (!shell.isDisposed()) {
      if (!display.readAndDispatch()) {
        display.sleep();
      }
    }

    System.exit(0);
  }

}

Im UI Thread:
Java:
/**
 * 
 */
package de.tutorials;

import org.eclipse.swt.SWT;
import org.eclipse.swt.browser.Browser;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

/**
 * @author Tom
 */
public class SWTBrowserMouseCoordinatesExample {

  /**
   * @param args
   */
  public static void main(String[] args) {
    final Display display = new Display();
    Shell shell = new Shell(display);

    shell.setLayout(new FillLayout());
    shell.setText("SWTBrowserMouseCoordinatesExample");
    final Browser browser = new Browser(shell, SWT.NONE);
    browser.setUrl("http://www.tutorials.de");

    shell.open();

    Point oldCursorLocation = null;
    while (!shell.isDisposed()) {
      if (!display.readAndDispatch()) {
        display.sleep();
      } else {
        Point currentCursorLocation = display.getCursorLocation();
        if (null != oldCursorLocation && !currentCursorLocation.equals(oldCursorLocation)) {
          Point cursorLocatitonWithinBrowserWidget = display.map(null, browser, currentCursorLocation);
          System.out.println(currentCursorLocation + " -> " + cursorLocatitonWithinBrowserWidget);
        }
        oldCursorLocation = currentCursorLocation;
      }
    }

    System.exit(0);
  }
}

Gruß Tom
 
Zurück