3

コントロール、ビュー、エディターがたくさんあります。エディターが時々フォーカスを失っていることがわかりました。デバッガーでブレークポイントに切り替えてアプリケーションに戻ると、エディターがフォーカスを失うことはないため、この問題をデバッグで再現するのは困難です。

コントロールがフォーカスを失った理由を見つける方法のヒントとコツをお勧めできますか?

4

2 に答える 2

5

@davidの回答にいくつかのコンテキストを追加します:

FocusListenerすべてのに a を追加できますWidget。このリスナー内で、フォーカスを失った/獲得したウィジェットに関する情報を出力できます。

簡単にするために、 をWidget使用して にメタデータを追加できますWidget#setData(Object)


これを理解するのに役立つコード例を次に示します。

public static void main(String[] args)
{
    Display display = new Display();
    final Shell shell = new Shell(display);
    shell.setText("StackOverflow");
    shell.setLayout(new FillLayout());

    FocusListener focusListener = new FocusListener()
    {
        @Override
        public void focusLost(FocusEvent e)
        {
            System.out.println("Focus out: " + e.widget.getData());
        }

        @Override
        public void focusGained(FocusEvent e)
        {
            System.out.println("Focus in: " + e.widget.getData());
        }
    };

    Text text = new Text(shell, SWT.BORDER);
    text.setText("Text");
    text.setData("Text");
    text.addFocusListener(focusListener);

    Button button = new Button(shell, SWT.PUSH);
    button.setText("Button");
    button.setData("Button");
    button.addFocusListener(focusListener);

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

setData()との使用に注意してくださいgetData()...

于 2013-06-24T19:54:18.487 に答える