Qual a melhor maneira?

Olá pessoal, boa noite :smiley: desculpem pelo título nada explicativo.

Sendo necessário fazer algo como isso:

class Form extends JFrame
{
    private VisualProxy proxy; // ganha valor em algum momento
    public void init()
    {
        Container c = getContentPane();
        c.add( proxy.getVisualComponent() );

        proxy.validate();
    }
}

Qual das destas opções é melhor.
Esta:

public interface VisualProxy
{
    public JComponent getVisualComponent();
    public void validate();
    public void setCorrespondingField();
}

public class MeuComponent extends JTextField implements VisualProxy
{
    private java.lang.reflect.Field Field;
    public JComponent getVisualComponent()
    {
        return this;
    }

    public void validate() throws BlueScreenOfDeathException
    {
        if( field == null )
            throw new BlueScreenOfDeathException();
        
        if( isThisOk )
          field.set( declaringObject, this.getText() );
    }

    public void setCorrespondingField( Field field )
    {
        this.field = field;
    }
}

Esta outra

public abstract class VisualProxy extends JComponent
{
    protected Field field;
    
    // desta maneira posso definir algum construtor padrão
    public VisualProxy( Field field )
    {
        this.field = field;
    }
    public abstract void validate();
}

public class MeuComponent extends VisualProxy
{
    public JComponent getVisualComponent()
    {
        return new JTextField();
    }

    public void validate()
    {
        if( isThisOk )
          field.set( declaringObject, this.getText() );
    }
}

Ou a opção secreta número 3? Ou ainda a opção bônus número 2.5?

Valeu!

eu sempre acho meigo um return this em um metodo que voce implementou de uma interface. mas nesse caso nao tem motivo algum pra voce estender JTextField. Transforma essa heranca em delegacao, ja que voce soh ta herdando por simples comodidade, nao por polimorfismo. o que seria uma mistura das 2.

Entendi, faz sentido :thumbup:

Valeu Paulo :smiley: