GWT Uibinder: أضف معالج الماوس إلى لوحة أو شبكة
-
29-09-2019 - |
سؤال
لا يمكنني العثور على طريقة لإضافة معالج الماوس إلى لوحة GWT أو شبكة أثناء استخدام UiBinder.
أحتاج أساسًا إلى طريقة يمكنني اكتشاف ما يلي على شبكة:
- اكتشف الخلية التي يحدث فيها الحدث.
- اكتشف حدث ماوس
- اكتشف الحدث أسفل الماوس
- اكتشف الحدث Out Mouse
- اكتشف الماوس على الحدث
كنت قد خططت لمحاولة القيام بذلك مع اللوحة المطلقة المتراكبة فوق الشبكة. كان بإمكاني اكتشاف هذه الأحداث على 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");
}
});
}
}