سؤال

لا يمكنني العثور على طريقة لإضافة معالج الماوس إلى لوحة GWT أو شبكة أثناء استخدام UiBinder.

أحتاج أساسًا إلى طريقة يمكنني اكتشاف ما يلي على شبكة:

  1. اكتشف الخلية التي يحدث فيها الحدث.
  2. اكتشف حدث ماوس
  3. اكتشف الحدث أسفل الماوس
  4. اكتشف الحدث Out Mouse
  5. اكتشف الماوس على الحدث

كنت قد خططت لمحاولة القيام بذلك مع اللوحة المطلقة المتراكبة فوق الشبكة. كان بإمكاني اكتشاف هذه الأحداث على AbsolutePanel ، ثم استنادًا إلى موقع الحدث ، وتحديد الخلية التي كان سيحدث فيها الحدث لو لم يتم تراكب Absolutepanel على رأس الشبكة ، ثم يتصرف وفقًا لذلك. اكتشفت الآن أن نفس القيود التي يتم وضعها على اللوحات من حيث معالجات النقر ، وليس لديها العديد من الخيارات.

أنا فقط بحاجة إلى إيجاد طريقة للحصول على الأحداث أعلاه للعمل على الشبكة. ماذا تنصح؟ عدم استخدام Uibinder ، كنت أستخدم Domhandlers ، والتي يبدو أنها معطل في Uibinder (هل أنا مخطئ؟).

أي مساعدة موضع تقدير كبير. شكرًا!

~ سكوت

هل كانت مفيدة؟

المحلول

يمكنك تمديد الشبكة وجعلها تنفذ واجهات مناسبة مثل:

public class ClickableGrid extends Grid implements HasMouseDownHandlers {
     ...
    public HandlerRegistration addMouseDownHandler(MouseDownHandler handler) {
        return addDomHandler(handler, MouseDownEvent.getType());
    }

}

ثم استخدمه في القالب

<my:ClickableGrid ui:field="clickableGrid">

وإضافة معالج في امتلاك الفصل

@UiHandler("clickableGrid")
    void handleClick(MouseDownEvent event) {
...
}

أتمنى أن يساعد ذلك.

نصائح أخرى

... أو ببساطة ضع Grid داخل FocusPanel:

public class MouseGrid extends Composite {

    public MouseGrid() {
        Grid grid = new Grid(3, 3);
        for (int row = 0; row < 3; ++row) {
            for (int col = 0; col < 3; ++col) {
                grid.setText(row, col, "" + row
                        + ", "
                        + col);
            }
        }
        FocusPanel panel = new FocusPanel();
        panel.setWidget(grid);
        initWidget(panel);
        panel.addMouseDownHandler(new MouseDownHandler() {

            @Override
            public void onMouseDown(MouseDownEvent event) {
                Window.alert("mouse down");
            }
        });
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top