Java 如何侦听编辑器<;上的小部件触发的ValueChangedEvents&燃气轮机;在GWT?
“我的编辑器”由几个文本框、复选框等组成。在编辑器本身上侦听由其小部件触发的ValueChangeEvents的正确方式是什么 我试图弄明白,但没有用。(G+帖子的扩展讨论) 您可以考虑以下几点:Java 如何侦听编辑器<;上的小部件触发的ValueChangedEvents&燃气轮机;在GWT?,java,events,gwt,Java,Events,Gwt,“我的编辑器”由几个文本框、复选框等组成。在编辑器本身上侦听由其小部件触发的ValueChangeEvents的正确方式是什么 我试图弄明白,但没有用。(G+帖子的扩展讨论) 您可以考虑以下几点: 安慰剂保存按钮不是一个糟糕的主意。在对话框中,“保存”通常意味着“保存并关闭”,这意味着它可能位于“取消并关闭”类型按钮旁边-如果未进行任何更改,效果将相同。只有代码需要知道在没有更改的情况下有差异。在文档中,“保存”只是一种刷新最近更改的方法,同样,按钮后面的代码可以忽略它。允许用户指示软件保存超
- 安慰剂保存按钮不是一个糟糕的主意。在对话框中,“保存”通常意味着“保存并关闭”,这意味着它可能位于“取消并关闭”类型按钮旁边-如果未进行任何更改,效果将相同。只有代码需要知道在没有更改的情况下有差异。在文档中,“保存”只是一种刷新最近更改的方法,同样,按钮后面的代码可以忽略它。允许用户指示软件保存超出需要的数据可能不是一件坏事,也就是说
- 编辑器框架的构建允许访问者浏览驱动程序知道的编辑器树。这将使您能够构建一个访问者,该访问者可以询问树中的每个编辑器是否实现HasValueChangeHandlers,如果实现,则添加一个处理程序。但是
- ValueChangeEvents在小部件逻辑上发生更改并具有新值时关闭。这些更改几乎总是在用户模糊出字段后发生-如果光标仍在用户修改的唯一文本框中,并且用户将光标悬停在“保存”按钮上,则光标仍将模糊,因为没有发生ValueChangeEvent。您需要等待他们离开该字段,或者轮询活动字段以查看其是否有新值,或者询问驱动程序该字段是否脏。请注意,并不是所有的小部件都能很好地进行轮询-一些小部件在仍处于关注状态时没有可用的值(例如任何CellWidget),而其他小部件不理解isDirty()(如HasDataEditor)
HasValueChangeHandlers
的示例编辑器访问者:
driver.accept(new EditorVisitor(){
@Override
public <T> void endVisit(EditorContext<T> ctx) {
Editor<T> ed = ctx.getEditor();
if (ed instanceof HasValueChangeHandlers) {
@SuppressWarnings("unchecked")
HasValueChangeHandlers<T> hasHandlers = (HasValueChangeHandlers<T>) ed;
hasHandlers.addValueChangeHandler(new ValueChangeHandler<T>() {
@Override
public void onValueChange(ValueChangeEvent<T> event) {
// TODO update button
// consider comparing event.getValue() with ctx.getFromModel()
// though that requires seeing which editors have changes...
}
});
}
}
});
Timer t = new Timer(){
@Override
public void run() {
boolean hasChanges = driver.isDirty();
// TODO update button with the hasChanges value
}
};
t.schedule(500);
// Don't forget to cancel() this when done, both on save and cancel!