我目前正在爲GWT開發一個類似油漆的應用程序。我想添加一個鼠標處理程序,當用戶在畫布上拖動鼠標時運行(例如製作方塊等),問題是我不確定使用哪個處理程序。仔細查看canvas中實現的處理程序,我已經提供了一些提示,但關於哪些事件適用的文檔很少。使用拖動鼠標處理程序與GWT畫布
有誰知道我應該如何實現它?謝謝。
我目前正在爲GWT開發一個類似油漆的應用程序。我想添加一個鼠標處理程序,當用戶在畫布上拖動鼠標時運行(例如製作方塊等),問題是我不確定使用哪個處理程序。仔細查看canvas中實現的處理程序,我已經提供了一些提示,但關於哪些事件適用的文檔很少。使用拖動鼠標處理程序與GWT畫布
有誰知道我應該如何實現它?謝謝。
沒有「拖動」處理程序。您可以使用MouseDown,MouseMove和MouseUp事件進行「拖拽」。
class YourWidget extends Composite
{
@UiField
Canvas yourCanvas;
private boolean dragging;
private HandlerRegistration mouseMove;
@UiHandler("yourCanvas")
void onMouseDown(MouseDownEvent e) {
dragging = true;
// do other stuff related to starting of "dragging"
mouseMove = yourCanvas.addMouseMoveHandler(new MouseMoveHandler(){
public void onMouseMove(MouseMoveEvent e) {
// ...do stuff that you need when "dragging"
}
});
}
@UiHandler("yourCanvas")
void onMouseUp(MouseUpEvent e) {
if (dragging){
// do other stuff related to stopping of "dragging"
dragging = false;
mouseMove.remove(); // in earlier versions of GWT
//mouseMove.removeHandler(); //in later versions of GWT
}
}
}
我搞砸周圍的這個問題,以及和前一段時間產生的這個小東西:
http://alpha2.colorboxthing.appspot.com/#/
我基本上包裹任何我需要用FocusPanel。在我的情況下,它是一個FlowPanel。
從我UiBinder的該程序:
<g:FocusPanel ui:field="boxFocus" styleName="{style.boxFocus}">
<g:FlowPanel ui:field="boxPanel" styleName="{style.boxFocus}"></g:FlowPanel>
</g:FocusPanel>
我如何使用調焦面板(display.getBoxFocus()看到下面只得到FocusPanel以上):
display.getBoxFocus().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
}
});
display.getBoxFocus().addMouseDownHandler(new MouseDownHandler() {
@Override
public void onMouseDown(MouseDownEvent event) {
}
});
display.getBoxFocus().addMouseMoveHandler(new MouseMoveHandler() {
@Override
public void onMouseMove(MouseMoveEvent event) {
}
});
display.getBoxFocus().addMouseUpHandler(new MouseUpHandler() {
@Override
public void onMouseUp(MouseUpEvent event) {
}
});
// etc!
要回答你的問題關於什麼處理程序用於「拖」我沒有找到一個處理程序來爲我做這件事。相反,我使用了MouseDownHandler
,MouseMoveHandler
和MouseUpHandler
。
使用MouseDownHandler
來設置一個標誌,該標誌確定用戶鼠標何時關閉。我這樣做是爲了在調用MouseMoveHandler
時知道它是否應該做任何事情。最後使用MouseUpHandler
切換該標誌,如果用戶有鼠標關閉或沒有。
該方法存在一些缺陷(如果用戶將他們的鼠標從FocusPanel上拖曳下來),但是因爲我的應用程序只是一個有趣的項目,我並沒有太在意自己的太多。如果它成爲一個大問題,可以添加其他處理程序來解決這個問題。
'mouseMove.remove()'是'mouseMove.removeHandler();'在GWT 2.6.0中(我不知道以前的版本) – Aerus