如何找到控制失去焦点的原因

Pav*_*din 3 java swt jface eclipse-rcp

我有很多控件,视图和编辑器.我发现编辑有时会失去焦点.这个问题很难在调试中重现,因为当我在调试器中切换到断点并返回应用程序时,编辑器永远不会失去焦点.

你能推荐一些提示和技巧来找出控制失去焦点的原因吗?

Baz*_*Baz 5

在@david的答案中添加一些上下文:

你可以添加一个FocusListenerWidget的所有.在此侦听器中,您可以输出有关丢失/获得焦点的窗口小部件的一些信息.

为了简化操作,您可以Widget使用向s 添加元数据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();
}
Run Code Online (Sandbox Code Playgroud)

注意使用setData()getData()......