Frage

Ich implementiere eine Tastatur auf dem Bildschirm in Java für SWT und AWT. Eine wichtige Sache ist, die Tastatur in eine Position zu verschieben, in der das ausgewählte Textfeld angezeigt werden kann und nicht hinter der Tastatur auf dem Bildschirm liegt.

Für AWT kann ich die Position der aktuellen ausgewählten Komponente mit erkennen

Component owner = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner();
if (owner == null) {
    return;
}
Point ownerLocation = owner.getLocationOnScreen();
Dimension ownerSize = owner.getSize();

Wie kann ich die gleiche Logik in SWT implementieren? Ich erhalte das aktuell ausgewählte Widget, indem ich der SWT -Event -Warteschlange einen Fokussierer hinzufüge. Aber wenn ich anrufe

Point location = new Point(mTextWidget.getLocation().x, mTextWidget.getLocation().y);
Dimension dimension = new Dimension(mTextWidget.getSize().x, mTextWidget.getSize().y);

Ich werde die Position relativ auf den übergeordneten Komposit bringen.

Wie kann ich den Standort eines speziellen Widget -Relativ auf den gesamten Bildschirm bringen?

War es hilfreich?

Lösung

Ich glaube die Methode Control.todisplay () Sollte in der Lage sein, Ihre Koordinaten in relativ zum Bildschirm in diejenigen zu übersetzen.

Dies Snippet kann veranschaulichen, wonach Sie suchen:

package org.eclipse.jface.snippets;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;

public class Bla {
    public static void main(String[] args) {
        Display display = new Display();
        Shell shell = new Shell(display);

        final Text t = new Text(shell,SWT.BORDER);
        t.setBounds(new Rectangle(10,10,200,30));
        System.err.println(t.toDisplay(1, 1));

        Button b = new Button(shell,SWT.PUSH);
        b.setText("Show size");
        b.setBounds(new Rectangle(220,10,100,20));
        b.addSelectionListener(new SelectionAdapter() {

            public void widgetSelected(SelectionEvent e) {
                System.err.println(t.toDisplay(1, 1)); 
            }

        });

        shell.open();

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

        display.dispose();
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top