我有一堆控件、视图和编辑器。我发现编辑器有时会失去焦点。这个问题很难在调试中重现,因为当我在调试器中切换到断点并返回应用程序时,编辑器永远不会失去焦点。
你能推荐一些提示和技巧来找出控制失去焦点的原因吗?
我有一堆控件、视图和编辑器。我发现编辑器有时会失去焦点。这个问题很难在调试中重现,因为当我在调试器中切换到断点并返回应用程序时,编辑器永远不会失去焦点。
你能推荐一些提示和技巧来找出控制失去焦点的原因吗?
为@david 的回答添加一些上下文:
您可以将 a 添加FocusListener
到所有Widget
s。在此侦听器中,您可以输出有关丢失/获得焦点的小部件的一些信息。
为了使事情变得更容易,您可以使用 . 将元数据添加到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();
}
注意使用setData()
和getData()
...
添加发送日志消息的焦点侦听器?