コントロール、ビュー、エディターがたくさんあります。エディターが時々フォーカスを失っていることがわかりました。デバッガーでブレークポイントに切り替えてアプリケーションに戻ると、エディターがフォーカスを失うことはないため、この問題をデバッグで再現するのは困難です。
コントロールがフォーカスを失った理由を見つける方法のヒントとコツをお勧めできますか?
コントロール、ビュー、エディターがたくさんあります。エディターが時々フォーカスを失っていることがわかりました。デバッガーでブレークポイントに切り替えてアプリケーションに戻ると、エディターがフォーカスを失うことはないため、この問題をデバッグで再現するのは困難です。
コントロールがフォーカスを失った理由を見つける方法のヒントとコツをお勧めできますか?
@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()
...