[英]SWT Text Focus and default selection(return key) events
我的RCP遇到一個奇怪的問題。 我不使用Linux進行開發,因此我對常見錯誤的了解很少。 我正在使用Ubuntu 11.10嘗試RCP。
在我的RCP中,我有一個SWT文本,該文本具有兩個附加的偵聽器-一個用於焦點( FocusAdapter
),另一個用於SWT.DefaultSelection
。 在FocusAdapter
,我實現了focusLost
方法。
行為是這樣的,如果並且當用戶編輯文本並按下返回鍵時 ,將調用SWT.DefaultSelection
偵聽器的handleEvent
並顯示一條消息,以確認新文本並更新Text
字段。 如果用戶編輯文本但focusLost
回車鍵,而只是單擊Text
字段外,則將調用focusLost
事件,該事件focusLost
文本恢復為原始文本( text.setText(originalText);
)。
當我從Eclipse啟動它時,這似乎工作正常,但是當我通過Maven + Tycho導出產品時,該行為似乎停止了。 發生的情況是,當用戶編輯文本時,無論用戶是否按了回車鍵,或者只是在“ Text
字段外單擊,它都將還原為原始文本。 也不顯示確認已編輯文本的消息對話框。
從我的收集來看,似乎僅使用focusLost事件,而返回鍵無效。 如果這很明顯,我深表歉意,但是我沒有在Windows機器上遇到過這,這是我進行主要開發時所使用的。
您可以改為監聽SWT.Traverse
並檢查event.detail
等於SWT.TRAVERSE_RETURN
。 我在Linux上對其進行了測試,並且可以正常工作:
public static void main(String[] args)
{
final Display display = new Display();
final Shell shell = new Shell(display);
shell.setLayout(new FillLayout());
final Text text = new Text(shell, SWT.BORDER);
text.addListener(SWT.Traverse, new Listener()
{
@Override
public void handleEvent(Event event)
{
if(event.detail == SWT.TRAVERSE_RETURN)
{
System.out.println("Enter pressed");
}
}
});
shell.pack();
shell.open();
while (!shell.isDisposed())
{
if (!display.readAndDispatch())
{
display.sleep();
}
}
display.dispose();
}
這里有一個相關的問題:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.