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

时间:2013-06-24 18:18:16

标签: java swt eclipse-rcp jface

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

你能推荐一下吗?如何找到控制失去焦点的技巧?

2 个答案:

答案 0 :(得分:5)

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

您可以为所有FocusListener添加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() ...

的使用情况

答案 1 :(得分:3)

添加发送日志消息的焦点侦听器?