[英]Java SWT: mouseUp() is not fired when opening a Dialog in mousDown()
如果在StyledText中單擊某個字符串,我的程序將打開一個對話框。 因此,在mouseDown()中,我首先要檢查已單擊的內容,然后打開一個對話框。 這可行。 關閉對話框后,不會調用mouseUp()。 這將導致在移動光標時選擇文本,就像用戶嘗試選擇文本一樣。 我可以通過執行以下任務來重現該行為:
在我的用例中,不需要觸發mouseUp()。 但是,如果不觸發它,則表示操作系統假定鼠標按鈕仍處於按下狀態並選擇了文本。 如果對話框打開並奪走焦點,這可能是正確的行為。 但是,肯定沒有辦法告訴系統鼠標按鈕已被釋放。
myStlyedText.addMouseListener(new MouseListener() {
@Override
public void mouseUp(MouseEvent e) {
System.out.println("MouseUp is fired");
}
@Override
public void mouseDown(MouseEvent e) {
if (certainStringClicked()) {
openDialog();
}
}
@Override
public void mouseDoubleClick(MouseEvent e) {}
});
我可以驗證未調用mouseUp(),因為未在控制台上打印“ MousUp被觸發”。
處理此問題的最佳方法是什么? 我已經嘗試將焦點放在另一個小部件(setFocus()和forceFocus())上,但這沒有幫助。
我試圖自己打電話給mouseUp:
Event event = new Event();
event.type = SWT.MouseUp;
event.button = 1;
MouseEvent mouseUpEvent = new MouseEvent(event);
mouseUp(mouseUpEvent);
這導致出現消息“已觸發MousUp”,但是選擇問題仍然存在。
我可以將代碼移到mouseUp()方法中,但這實際上並不是我想要的。 該對話框應立即出現。 我還可以做些什么?
嘗試添加myStlyedText.notifyListeners(SWT.MouseUp, null);
您的代碼。 它應該工作。
myStlyedText.addMouseListener(new MouseListener() {
@Override
public void mouseUp(MouseEvent e) {
System.out.println("MouseUp is fired");
}
@Override
public void mouseDown(MouseEvent e) {
if (certainStringClicked()) {
myStlyedText.notifyListeners( SWT.MouseUp, null );
openDialog();
}
}
@Override
public void mouseDoubleClick(MouseEvent e) {}
});
這不是一個好的解決方案 。 但這對於某些人來說可能是一種解決方法。
可以在Dialog的構造函數中將SWT.MODELESS
添加到外殼樣式中,該構造函數擴展了jface.dialog.Dialog
。
setShellStyle(SWT.MODELESS);
MouseUp()獲取立即被解雇。
這里的問題是,盡管一個對話框已經打開,但仍可以通過單擊文本來打開許多對話框。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.