gpt4 book ai didi

events - GWT FocusPanel、Tab 键和焦点处理程序

转载 作者:行者123 更新时间:2023-12-05 00:01:08 25 4
gpt4 key购买 nike

我正在实现一个扩展 Composite 并实现 FocusableHasFocusHandlers 的自定义小部件。

小部件在一个面板中包含两个小部件,我将它们包装到用于初始化小部件的 FocusPanel 中。我的构造函数看起来像这样:

public CustomBox() {
panel = new VerticalPanel();
...
panel.add(caption);
panel.add(icon);
...
focusPanel = new FocusPanel(panel);
initWidget(focusPanel);
}

我委托(delegate)焦点面板中 FocusableHasFocusHandlers 的实现,例如:

@Override
public void setFocus(boolean focused) {
focusPanel.setFocus(focused);
}

@Override
public void setTabIndex(int index) {
focusPanel.setTabIndex(index);
}

@Override
public HandlerRegistration addFocusHandler(FocusHandler handler) {
return focusPanel.addFocusHandler(handler);
}

之后,我可以使用 setFocus(true) 在我的任何对象中设置焦点,并使用 setTabIndex() 设置选项卡索引。 Tab 键也按预期工作,但我的问题是我无法处理焦点事件,因为永远不会调用用 addFocusHandler() 添加的处理程序的 onFocus() 方法。

我知道焦点正在改变,因为我跟随对象的焦点使用 :focus CSS 选择器更改其样式。

为什么从未调用焦点处理程序?

最佳答案

处理焦点事件可能很棘手且变化无常。 GWT 应该通过在需要时将隐藏的输入字段添加到 FocusPanel DIV 中来简化此操作。以下是 jQuery 文档的摘录:

The focus event is sent to an element when it gains focus. This event is implicitly applicable to a limited set of elements, such as form elements (<input>, <select>, etc.) and links (<a href>). In recent browser versions, the event can be extended to include all element types by explicitly setting the element's tabindex property. An element can gain focus via keyboard commands, such as the Tab key, or by mouse clicks on the element.

我不知道您的问题的解决方案,但我的猜测是与 HTML/浏览器/dom 非常相关的东西正在扰乱事件处理。例如,captionicon 是否也是 FocusPanel?这可能会影响焦点事件的冒泡方式。

关于events - GWT FocusPanel、Tab 键和焦点处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3131839/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com