我有一堆控件,視圖和編輯器。我發現編輯有時會失去焦點。 這個問題很難在調試中重現,因爲當我在調試器中切換到斷點並回到應用程序時,編輯器從不失去焦點。如何找到控件失去焦點的原因
你能推薦一些小技巧嗎&技巧如何找到控制失去焦點的原因?
我有一堆控件,視圖和編輯器。我發現編輯有時會失去焦點。 這個問題很難在調試中重現,因爲當我在調試器中切換到斷點並回到應用程序時,編輯器從不失去焦點。如何找到控件失去焦點的原因
你能推薦一些小技巧嗎&技巧如何找到控制失去焦點的原因?
添加一些上下文@大衛的回答是:
您可以將FocusListener
添加到您的所有Widget
秒。在此偵聽器中,您可以輸出關於丟失/獲得焦點的小部件的一些信息。
爲了使事情更容易,您可以使用Widget#setData(Object)
將元數據添加到Widget
。
這裏是一個代碼示例,應該幫助你理出頭緒:
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()
利用率...
添加發送日誌消息的焦點偵聽器?
有控件數量龐大,其誕生和死亡在多個線程中。如果沒有顯式調用addFocusListener,是否可以對任何控件執行此類跟蹤? –
@PavelNuzhdin不,我不這麼認爲,對不起... – Baz
有人建議我使用AOP(即aspectj)將偵聽器添加到所有控件或在Eclipse工作區中加載swt源代碼,並在其中加入setFocus。我成功地使用了最後的方法 –