9

SWTおよびAWT用にJavaでオンスクリーンキーボードを実装しています。重要なことの1つは、選択したテキストフィールドが表示され、画面キーボードの後ろにない位置にキーボードを移動することです。

AWTの場合、iは現在選択されているコンポーネントの位置を次のように検出できます。

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

SWTに同じロジックを実装するにはどうすればよいですか?SWTイベントキューにfocuslistenerを追加して、現在選択されているウィジェットを取得します。しかし、私が電話するとき

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

親コンポジットに相対的な位置を取得します。

画面全体に関連する特別なウィジェットの場所を取得するにはどうすればよいですか?

4

1 に答える 1

17

Control.toDisplay()メソッドは、座標を画面を基準にした座標に変換できるはずです。

このスニペットは、あなたが何を求めているかを示している可能性があります。

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();
    }
}
于 2008-12-04T08:04:05.113 に答える