Java 当模型未更新时,如何禁用按钮?

Java 当模型未更新时,如何禁用按钮?,java,data-binding,swt,jface,Java,Data Binding,Swt,Jface,在我的UI中,我有2个文本字段和2个按钮。我正在使用jface数据绑定绑定文本字段,我正在进行验证,根据验证成功与否,模型将不会更新。我希望我的按钮做出相应的响应。例如,如果我的模型没有更新,我希望禁用我的按钮。我还需要做一件事我不想做硬编码。所以没有硬编码有什么方法可以做到这一点 另一方面,我想将一个按钮绑定到文本字段,这样当文本字段有一些不需要的值时,按钮就应该被禁用。另一方面,我在文本字段上进行数据绑定,当文本字段没有适当的值时,它将不会更新其模型。然后,当值不合适,我可以这样做。任何关于

在我的UI中,我有2个文本字段和2个按钮。我正在使用jface数据绑定绑定文本字段,我正在进行验证,根据验证成功与否,模型将不会更新。我希望我的按钮做出相应的响应。例如,如果我的模型没有更新,我希望禁用我的按钮。我还需要做一件事我不想做硬编码。所以没有硬编码有什么方法可以做到这一点


另一方面,我想将一个按钮绑定到文本字段,这样当文本字段有一些不需要的值时,按钮就应该被禁用。另一方面,我在文本字段上进行数据绑定,当文本字段没有适当的值时,它将不会更新其模型。然后,当值不合适,我可以这样做。任何关于这个的指针都会对我有很大帮助。

你可以利用下面的侦听器。将侦听器添加到您的
可观察的

 org.eclipse.core.databinding.observable.value.IValueChangeListener

经过一些研究,我发现我必须观察按钮的enable/disable属性,并将其与当前emf数据绑定上下文绑定。下面给出了我使用的函数的详细信息:

void bindEnablementButtonToValidationStatus(Button button, EMFDataBindingContext ctx) {

    IObservableValue buttonEnable = SWTObservables.observeEnabled(button);
    IObservableValue validationStatus = new AggregateValidationStatus(
            ctx.getValidationRealm(),
            ctx.getBindings(), 
            AggregateValidationStatus.MAX_SEVERITY);

    ctx.bindValue(buttonEnable, validationStatus, 
            new EMFUpdateValueStrategy(
                    UpdateValueStrategy.POLICY_NEVER), 
                    new EMFUpdateValueStrategy().setConverter(
                            new Converter(IStatus.class, Boolean.TYPE) {
                                public Object convert(Object fromObject) {
                                    return new Boolean(((IStatus)fromObject).isOK());
                                }
                            }));
}