3

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

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

4

2 回答 2

5

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

您可以将 a 添加FocusListener到所有Widgets。在此侦听器中,您可以输出有关丢失/获得焦点的小部件的一些信息。

为了使事情变得更容易,您可以使用 . 将元数据添加到Widgets 中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 回答
3

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

于 2013-06-24T18:38:05.793 回答