Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java GXT-Can';t到达文本区域上的onscroll事件处理程序_Java_Gwt_Gxt - Fatal编程技术网

Java GXT-Can';t到达文本区域上的onscroll事件处理程序

Java GXT-Can';t到达文本区域上的onscroll事件处理程序,java,gwt,gxt,Java,Gwt,Gxt,我试图在文本区域(gxt)上设置一个处理程序,以了解用户何时到达文本区域的顶部 TextArea logTextArea = new TextArea(); logTextArea.setReadOnly(true); logTextArea.addDomHandler(new ScrollHandler() { @Override public void onScroll(ScrollEvent event) { InputElement textAreaEl

我试图在文本区域(gxt)上设置一个处理程序,以了解用户何时到达文本区域的顶部

TextArea logTextArea = new TextArea();
logTextArea.setReadOnly(true);
logTextArea.addDomHandler(new ScrollHandler() {

    @Override
    public void onScroll(ScrollEvent event) {
        InputElement textAreaElement = logTextArea.getCell().getInputElement(logTextArea.getElement());
        int scrollTop = textAreaElement.getScrollTop();
    }
}, ScrollEvent.getType());

VerticalLayoutContainer dataContainer = new VerticalLayoutContainer();

HorizontalLayoutContainer secondRow = new HorizontalLayoutContainer();
secondRow.add(logTextArea, new HorizontalLayoutData(1, 1, new Margins(5, 10, 5, 10)));

dataContainer.add(secondRow, new VerticalLayoutData(1, 0.5));

add(dataContainer);//this class extends ContentPanel

这个处理程序从未在scroll上调用过,但我也尝试过很多其他事件,比如mouseover、mousewell、mouseclick。。。所有这些活动都奏效了。有人能帮上忙吗?

AFAIK,如果事件的目标和小部件不是相同的元素,则scroll事件在基于单元格的现成小部件中不起作用。 GXT的TextArea是一个具有这种DOM结构的小部件

这是因为scroll事件是一个“非冒泡”事件。 AFAIK,GWT小部件,使用单元格,对通过GWT事件系统调度的非冒泡事件具有特殊处理。 而且支持非冒泡事件的类型列表太短,仅限于
焦点
模糊
加载
错误
事件。 有关详细信息,请参见
CellBasedWidgetImplStandard
class

我建议的第一个解决方案是为textarea显式分配onscroll处理程序。 例如:

Event.sinkEvents(textAreaElement, Event.getEventsSunk(textAreaElement) | Event.ONSCROLL);
这里的
textAreaElement
-是textareadom元素

但每次当单元格重新呈现其内容时(例如,当为TextArea小部件调用setValue方法时),都应该这样做

其他解决方案有点老套,使用私有api实现,但只能对基于单元的小部件应用一次。您可以执行与在
CellBasedWidgetImplStandard.sinkEvent(小部件,字符串)
中相同的操作,例如:

WidgetHelper.sinkEvent(logTextArea.getElement(), BrowserEvents.SCROLL);
其中,
WidgetHelper
可能如下所示:

public class WidgetHelper {
    public static void sincEvent(Element element, String typeName){
        element.setAttribute("__gwtCellBasedWidgetImplDispatching" + typeName, "true");
        sinkEvent0(element, typeName);
    }

    private static native void sinkEvent0(Element element, String typeName) /*-{
        element.addEventListener(typeName,
                        @com.google.gwt.user.cellview.client.CellBasedWidgetImplStandard::dispatchNonBubblingEvent, true);
    }-*/;
}

这可能是在GWT项目中创建问题的主题。

AFAIK,如果事件的目标和小部件不是相同的元素,则scroll事件在基于单元格的现成小部件中不起作用。 GXT的TextArea是一个具有这种DOM结构的小部件

这是因为scroll事件是一个“非冒泡”事件。 AFAIK,GWT小部件,使用单元格,对通过GWT事件系统调度的非冒泡事件具有特殊处理。 而且支持非冒泡事件的类型列表太短,仅限于
焦点
模糊
加载
错误
事件。 有关详细信息,请参见
CellBasedWidgetImplStandard
class

我建议的第一个解决方案是为textarea显式分配onscroll处理程序。 例如:

Event.sinkEvents(textAreaElement, Event.getEventsSunk(textAreaElement) | Event.ONSCROLL);
这里的
textAreaElement
-是textareadom元素

但每次当单元格重新呈现其内容时(例如,当为TextArea小部件调用setValue方法时),都应该这样做

其他解决方案有点老套,使用私有api实现,但只能对基于单元的小部件应用一次。您可以执行与在
CellBasedWidgetImplStandard.sinkEvent(小部件,字符串)
中相同的操作,例如:

WidgetHelper.sinkEvent(logTextArea.getElement(), BrowserEvents.SCROLL);
其中,
WidgetHelper
可能如下所示:

public class WidgetHelper {
    public static void sincEvent(Element element, String typeName){
        element.setAttribute("__gwtCellBasedWidgetImplDispatching" + typeName, "true");
        sinkEvent0(element, typeName);
    }

    private static native void sinkEvent0(Element element, String typeName) /*-{
        element.addEventListener(typeName,
                        @com.google.gwt.user.cellview.client.CellBasedWidgetImplStandard::dispatchNonBubblingEvent, true);
    }-*/;
}

这可能是GWT项目中产生问题的主题。

您能展示一下如何使用textarea,如何将其附加到其他小部件上吗?我编辑了我的答案。谢谢-另一个猜测,因为这被证明是错误的:您能为ScrollEvent显示完全限定的类名吗,例如,它在import语句中说了什么?com.google.gwt.event.dom.client.ScrollEvent这也是正确的。如果没有更多的上下文等等,我将很难说。稍后我将尝试运行相同的代码,并确认它确实有效。我唯一能想到的是-你怎么知道处理程序没有被调用-你没有让它做任何事情,只是读取值然后把它们扔掉?你能展示一下你是如何使用textarea的,你是如何将它附加到其他小部件上的吗?我编辑了我的答案。谢谢-另一个猜测,因为这被证明是错误的:您能为ScrollEvent显示完全限定的类名吗,即它在导入语句中所说的吗?com.google.gwt.event.dom.client.ScrollEvent这也是正确的。如果没有更多的上下文等等,我将很难说。稍后我将尝试运行相同的代码,并确认它确实有效。我唯一能想到的是——你怎么知道处理程序没有被调用——你没有让它做任何事情,只是读取值然后扔掉它们?