Roteamento de eventos

Tenho um componente que permite o usuario escolher o seu valor digitando em um textfield ou escolhendo em um dialog com uma lista de valores.

Esse componente possui duas bounded properties, type e status. Onde type é o valor escolhido pelo usuario e status é o resultado da validação disso.

Pode parecer estranho a validação estar no mesmo componente, mas como tenho dois métodos de entrada gostaria de deixar isso transparente aos usuarios do componente.

Tenho +/- o seguinte:

    private void setPackageInternal(IPackageFragment packageFragment) {
        IPackageFragment old = this.packageFragment;
        this.packageFragment = packageFragment;
        support.firePropertyChange(PACKAGE_FRAGMENT, old, packageFragment);
    }

    protected void inputTextChanged(String newValue) {
        IStatus status = validatePackageName(newValue);
        setStatus(status);
        if (!status.matches(IStatus.ERROR))
            setPackageFragment(findPackage(newValue));
        else
            setPackageInternal(null);
    }

    public void setPackageFragment(IPackageFragment packageFragment) {
        setPackageInternal(packageFragment);
        String txt = packageFragment == null ? "" : packageFragment
                .getElementName();
        if (!txt.equals(getText()))
            setText(txt);
    }

O problema aqui é quando o usuario digita algo errado, se eu simplesmente chamar setPackageFragment(null) vai apagar o texto já digitado; e se no setPackageFragment eu não atualizar o texto quando o componente for manipulado programáticamente, a UI vai ficar inconsistente.

Notem que o papel de setPackageInternal é atualizar o valor e gerar eventos.

Alguem tem um idéia melhor para resolver esse empasse? Por que a minha solução cheira um pouco a peixe podre.

if(texto != null){
 //chama o setPackageFragment
}

:idea: Como o campo type é editado pelo usuario, faça um evento para o enter. E no treinamento para o uso do sistema diga pra apertar o enter quando trocar o valor do campo type, para validar o dado digitado.

Espero que ajude em algo… :smiley:

Valeu pelo comentario.

O problema é que o feedback conforme digita é muito importante por dois motivos:

:arrow: A GUI deve ter um comportamento uniforme, já existe funcionalidade semelhante em outras partes da aplicação e ficar diferente seria um desastre.

:arrow: É muito mais produtivo.