1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Dúvidas sobre implementação um novo projeto (MVC / MVP ou outra sigla)

Boa noite pessoal

Estou desenvolvendo uma nova ferramenta em java Swing e construí a estrutura usando a ideia de entidades (VO), daos e Crud (Regras de negócio). Nessa parte, tirando que talvez errei as nomenclaturas, eu acho que não errei muito. A questão foi na hora de chegar nas telas. Eu montei uma estrutura onde chame de controlador que faz controle de toda a tela, desde a pesquisa até a edição do registro. Ele controla quando ações como novo, editar, excluir, gravar, cancelar e pesquisar. Ele em si não conhece nada da tela, a tela que chama os métodos e através do framework BeansBinding que as propriedades são passadas aos componentes da tela. Não sei se essa maneira de programar ficou boa e por isso estou postando aqui partes do código que vocês possam opinar e me corrigir no que for necessário. desde já agradeço

PropertyChangeListenerControl.java

package br.com.tebosoftware.util;

import java.beans.PropertyChangeListener;
import java.io.Serializable;

/**
 *
 * @author Thales
 */
public interface PropertyChangeListenerControl extends Serializable {

    void addPropertyChangeListener(PropertyChangeListener listener);

    void addPropertyChangeListener(String propertyName, PropertyChangeListener listener);

    void removePropertyChangeListener(PropertyChangeListener listener);

    void removePropertyChangeListener(String propertyName, PropertyChangeListener listener);

}

PropertyChangeListenerControlImpl.java

package br.com.tebosoftware.util;

import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import javax.swing.event.SwingPropertyChangeSupport;

/**
 *
 * @author Thales
 */
public class PropertyChangeListenerControlImpl implements PropertyChangeListenerControl {

    private PropertyChangeSupport propertyChangeSupport;

    public PropertyChangeListenerControlImpl() {
    }

    public PropertyChangeListenerControlImpl(Object Source) {
        propertyChangeSupport = new SwingPropertyChangeSupport(Source, true);
    }

    protected PropertyChangeSupport getPropertyChangeSupport() {
        if (propertyChangeSupport == null) {
            propertyChangeSupport = new SwingPropertyChangeSupport(this, true);
        }
        return propertyChangeSupport;
    }

    @Override
    public void addPropertyChangeListener(PropertyChangeListener listener) {
        getPropertyChangeSupport().addPropertyChangeListener(listener);
    }

    @Override
    public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) {
        getPropertyChangeSupport().addPropertyChangeListener(propertyName, listener);
    }

    @Override
    public void removePropertyChangeListener(PropertyChangeListener listener) {
        getPropertyChangeSupport().removePropertyChangeListener(listener);
    }

    @Override
    public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) {
        getPropertyChangeSupport().removePropertyChangeListener(propertyName, listener);
    }

    public void firePropertyChange(String propertyName, Object oldValue, Object newValue) {
        getPropertyChangeSupport().firePropertyChange(propertyName, oldValue, newValue);
    }

    public void firePropertyChange(String propertyName, int oldValue, int newValue) {
        getPropertyChangeSupport().firePropertyChange(propertyName, oldValue, newValue);
    }

    public void firePropertyChange(String propertyName, boolean oldValue, boolean newValue) {
        getPropertyChangeSupport().firePropertyChange(propertyName, oldValue, newValue);
    }

}

Entidade.java

package br.com.tebosoftware.entidade;

import br.com.tebosoftware.util.PropertyChangeListenerControl;
import java.io.Serializable;
import java.util.List;

/**
 *
 * @author Thales
 */
public interface Entidade<I extends Serializable> extends Serializable, PropertyChangeListenerControl {

    void setId(I id);

    I getId();

    void validar(List<String> erros);
}

AbstractEntidade.java

/*
 * Tebo Software
 * 16/09/2014
 */
package br.com.tebosoftware.entidade;

import br.com.tebosoftware.util.PropertyChangeListenerControlImpl;
import java.io.Serializable;

/**
 *
 * @author Thales
 */
public abstract class AbstractEntidade<I extends Serializable> extends PropertyChangeListenerControlImpl implements Entidade<I> {

}

Estado.java

package br.com.tebosoftware.estado;

import br.com.tebosoftware.entidade.AbstractEntidade;
import br.com.tebosoftware.util.StringUtil;
import br.com.tebosoftware.util.Util;
import java.util.List;
import java.util.Objects;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;

/**
 *
 * @author Thales
 */
@Entity
public class Estado extends AbstractEntidade<String> {

    public static final int SIGLA_TAMANHO = 2;
    public static final int DESCRICAO_TAMANHO = 50;

    @Id
    @Column(nullable = false, length = SIGLA_TAMANHO)
    private String sigla;
    @Column(nullable = false, length = DESCRICAO_TAMANHO)
    private String descricao;
    private int codigo;

    public String getSigla() {
        return sigla;
    }

    public void setSigla(String sigla) {
        if (!Util.isEqual(this.sigla, sigla)) {
            String old = this.sigla;
            this.sigla = StringUtil.limitarString(sigla, SIGLA_TAMANHO, true);
            firePropertyChange("sigla", old, this.sigla);
        }
    }

    public String getDescricao() {
        return descricao;
    }

    public void setDescricao(String descricao) {
        if (!Util.isEqual(this.descricao, descricao)) {
            String old = this.descricao;
            this.descricao = StringUtil.limitarString(descricao, DESCRICAO_TAMANHO);
            firePropertyChange("descricao", old, this.descricao);
        }
    }

    public int getCodigo() {
        return codigo;
    }

    public void setCodigo(int codigo) {
        if (!Util.isEqual(this.codigo, codigo)) {
            int old = this.codigo;
            this.codigo = codigo;
            firePropertyChange("codigo", old, this.codigo);
        }
    }

    @Override
    public int hashCode() {
        int hash = 5;
        hash = 43 * hash + Objects.hashCode(this.sigla);
        hash = 43 * hash + Objects.hashCode(this.descricao);
        hash = 43 * hash + this.codigo;
        return hash;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Estado other = (Estado) obj;
        if (!Objects.equals(this.sigla, other.sigla)) {
            return false;
        }
        return true;
    }

    @Override
    public void setId(String id) {
        setSigla(id);
    }

    @Override
    public String getId() {
        return getSigla();
    }

    @Override
    public void validar(List<String> erros) {
        if (Util.isNull(getSigla())) {
            erros.add("A sigla é obrigatória");
        }
        if (!StringUtil.validarTamanho(getDescricao(), 2)) {
            erros.add("A descrição deve ter no mínimo 2 letras");
        }
    }

}

Dao.java

package br.com.tebosoftware.dao;

import br.com.tebosoftware.entidade.Entidade;
import java.io.Serializable;

/**
 *
 * @author Thales
 */
public interface Dao<E extends Entidade> extends Serializable {

    E novo();

    void gravar(E entidade);

    void excluir(E entidade);

    void atualizar(E entidade);

    E buscar(Serializable pk);

    void setLimite(int limite);

    int getLimite();

    void setIniciaEm(int iniciaEm);

    int getIniciaEm();
}

EstadoDao.java

package br.com.tebosoftware.estado;

import br.com.tebosoftware.dao.Dao;
import java.util.List;

/**
 *
 * @author Thales
 */
public interface EstadoDao extends Dao<Estado> {

    List<Estado> listarPorSigla(String sigla);

    List<Estado> listarPorDescricao(String descricao);
}

GenericDao.java

package br.com.tebosoftware.dao;

import br.com.tebosoftware.db.JpaControl;
import br.com.tebosoftware.entidade.Entidade;
import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.util.List;
import java.util.Map;
import javax.persistence.TypedQuery;

/**
 *
 * @author Thales
 */
public abstract class GenericDao<E extends Entidade> implements Dao<E> {

    private final Class<E> classEntidade;
    private final JpaControl jpaControl;
    private int limite = 0;
    private int iniciaEm = 0;

    public GenericDao(JpaControl jpaControl) {
        ParameterizedType genericSuperclass = (ParameterizedType) getClass().getGenericSuperclass();
        this.classEntidade = (Class<E>) genericSuperclass.getActualTypeArguments()[0];
        this.jpaControl = jpaControl;
    }

    public Class<E> getClassEntidade() {
        return classEntidade;
    }

    protected JpaControl getJpaControl() {
        return jpaControl;
    }

    protected TypedQuery<E> createQuery(String sql) {
        return jpaControl.getEntityManager().createQuery(sql, classEntidade);
    }

    protected TypedQuery<E> createQuery(String sql, Map<String, Object> params) {
        TypedQuery<E> qry = jpaControl.getEntityManager().createQuery(sql, classEntidade);
        params.keySet().forEach((p) -> {
            qry.setParameter(p, params.get(p));
        });
        if (limite > 0) {
            qry.setMaxResults(limite);
        }
        if (iniciaEm > 0) {
            qry.setFirstResult(iniciaEm);
        }
        return qry;
    }

    protected List<E> getResultList(String sql, Map<String, Object> params) {
        return createQuery(sql, params).getResultList();
    }

    @Override
    public E novo() {
        try {
            return classEntidade.newInstance();
        } catch (InstantiationException | IllegalAccessException ex) {
            throw new DaoException(ex);
        }
    }

    @Override
    public void gravar(E entidade) {
        try {
            if (entidade.getId() == null) {
                jpaControl.getEntityManager().persist(entidade);
            } else {
                jpaControl.getEntityManager().persist(jpaControl.getEntityManager().merge(entidade));
            }
            jpaControl.getEntityManager().flush();
        } catch (Throwable ex) {
            throw new DaoException(ex);
        }
    }

    @Override
    public void atualizar(E entidade) {
        try {
            jpaControl.getEntityManager().refresh(entidade);
        } catch (Throwable ex) {
            throw new DaoException(ex);
        }
    }

    @Override
    public void excluir(E entidade) {
        try {
            jpaControl.getEntityManager().remove(jpaControl.getEntityManager().merge(entidade));
            jpaControl.getEntityManager().flush();
        } catch (Throwable ex) {
            throw new DaoException(ex);
        }
    }

    @Override
    public E buscar(Serializable pk) {
        try {
            return jpaControl.getEntityManager().find(classEntidade, pk);
        } catch (Throwable ex) {
            throw new DaoException(ex);
        }
    }

    @Override
    public void setLimite(int limite) {
        this.limite = limite;
    }

    @Override
    public int getLimite() {
        return limite;
    }

    @Override
    public void setIniciaEm(int iniciaEm) {
        this.iniciaEm = iniciaEm;
    }

    @Override
    public int getIniciaEm() {
        return iniciaEm;
    }

}

EstadoDaoImpl.java

package br.com.tebosoftware.estado;

import br.com.tebosoftware.dao.GenericDao;
import br.com.tebosoftware.db.JpaControl;
import br.com.tebosoftware.util.Util;
import java.util.List;
import java.util.Map;

/**
 *
 * @author Thales
 */
public class EstadoDaoImpl extends GenericDao<Estado> implements EstadoDao {

    public EstadoDaoImpl(JpaControl jpaControl) {
        super(jpaControl);
    }

    @Override
    public List<Estado> listarPorSigla(String sigla) {
        Map<String, Object> params = Util.createMap();
        params.put("sigla", sigla);
        return getResultList(
                "select e "
                + "from Estado e "
                + "where upper(e.sigla) like upper(:sigla) "
                + "order by e.sigla", params);
    }

    @Override
    public List<Estado> listarPorDescricao(String descricao) {
        Map<String, Object> params = Util.createMap();
        params.put("descricao", descricao);
        return getResultList(
                "select e "
                + "from Estado e "
                + "where upper(e.descricao) like upper(:descricao) "
                + "order by e.descricao", params);
    }

}

Crud.java

package br.com.tebosoftware.crud;

import br.com.tebosoftware.entidade.Entidade;
import java.io.Serializable;

/**
 *
 * @author Thales
 */
public interface Crud<E extends Entidade> extends Serializable {

    E novaEntidade();

    void gravar(E entidade);

    void atualizar(E entidade);

    void excluir(E entidade);

    E buscar(Serializable pk);
}

EstadoCrud.java

package br.com.tebosoftware.estado;

import br.com.tebosoftware.crud.Crud;
import java.util.List;

/**
 *
 * @author Thales
 */
public interface EstadoCrud extends Crud<Estado> {

    List<Estado> listarPorSigla(String sigla);

    List<Estado> listarPorDescricao(String descricao);
}

GenericCrud.java

package br.com.tebosoftware.crud;

import br.com.tebosoftware.util.ValidacaoException;
import br.com.tebosoftware.dao.Dao;
import br.com.tebosoftware.db.JpaControl;
import br.com.tebosoftware.entidade.Entidade;
import br.com.tebosoftware.util.Util;
import java.io.Serializable;
import java.util.List;

/**
 *
 * @author Thales
 */
public abstract class GenericCrud<E extends Entidade, D extends Dao<E>> implements Crud<E> {

    private final JpaControl jpaControl;
    private final D dao;

    public GenericCrud(JpaControl jpaControl, D dao) {
        this.jpaControl = jpaControl;
        this.dao = dao;
    }

    protected JpaControl getJpaControl() {
        return jpaControl;
    }

    public D getDao() {
        return dao;
    }

    @Override
    public E novaEntidade() {
        return dao.novo();
    }

    protected void antesGravar(E entidade) {

    }

    protected void depoisGravar(E entidade) {

    }

    protected void antesExcluir(E entidade) {

    }

    protected void depoisExcluir(E entidade) {

    }

    @Override
    public void gravar(E entidade) {
        jpaControl.beginTransaction();
        try {
            List<String> erros = Util.createList();
            entidade.validar(erros);
            if (!erros.isEmpty()) {
                StringBuilder e = new StringBuilder();
                erros.forEach((s) -> {
                    e.append(s).append("\n");
                });
                throw new ValidacaoException(e.toString());
            }
            antesGravar(entidade);
            dao.gravar(entidade);
            depoisGravar(entidade);
            jpaControl.getEntityManager().flush();
            jpaControl.commitTransaction();
        } catch (Throwable ex) {
            jpaControl.rollbackTransaction();
            throw new CrudException(ex);
//        } finally {
//            jpaControl.close();
        }
    }

    @Override
    public void atualizar(E entidade) {
        try {
            dao.atualizar(entidade);
        } catch (Throwable ex) {
            throw new CrudException(ex);
        }
    }

    @Override
    public void excluir(E entidade) {
        jpaControl.beginTransaction();
        try {
            antesExcluir(entidade);
            dao.excluir(entidade);
            depoisExcluir(entidade);
            jpaControl.getEntityManager().flush();
            jpaControl.commitTransaction();
        } catch (Throwable ex) {
            jpaControl.rollbackTransaction();
            throw new CrudException(ex);
        }
    }

    @Override
    public E buscar(Serializable pk) {
        try {
            return dao.buscar(pk);
        } catch (Throwable ex) {
            throw new CrudException(ex);
        }
    }

}

EstadoCrudImpl.java

package br.com.tebosoftware.estado;

import br.com.tebosoftware.crud.CrudException;
import br.com.tebosoftware.crud.GenericCrud;
import br.com.tebosoftware.db.JpaControl;
import java.util.List;

/**
 *
 * @author Thales
 */
public class EstadoCrudImpl extends GenericCrud<Estado, EstadoDao> implements EstadoCrud {

    public EstadoCrudImpl(JpaControl jpaControl, EstadoDao dao) {
        super(jpaControl, dao);
    }

    @Override
    public List<Estado> listarPorSigla(String sigla) {
        try {
            return getDao().listarPorSigla(sigla);
        } catch (Throwable ex) {
            throw new CrudException(ex);
        }
    }

    @Override
    public List<Estado> listarPorDescricao(String descricao) {
        try {
            return getDao().listarPorDescricao(descricao);
        } catch (Throwable ex) {
            throw new CrudException(ex);
        }
    }

}

ControladorCrud.java

package br.com.tebosoftware.controlador;

import br.com.tebosoftware.entidade.Entidade;
import br.com.tebosoftware.util.PropertyChangeListenerControl;
import java.util.List;

/**
 *
 * @author Thales
 */
public interface ControladorCrud<E extends Entidade> extends PropertyChangeListenerControl {

    void setEntidade(E entidade);

    E getEntidade();

    List<E> getLista();

    boolean isInserindo();

    boolean isEditando();

    void novo();

    void editar();

    void excluir();

    void gravar();

    void cancelar();

    void pesquisar();

    void atualizar();

    boolean isPodeInserir();

    boolean isPodeEditar();

    boolean isPodeExcluir();
}

EstadoControladorCrud.java

package br.com.tebosoftware.estado;

import br.com.tebosoftware.controlador.ControladorCrud;
import br.com.tebosoftware.util.PadraoEnum;

/**
 *
 * @author Thales
 */
public interface EstadoControladorCrud extends ControladorCrud<Estado> {

    void setTipoBusca(TipoBusca tipoBusca);

    TipoBusca getTipoBusca();

    void setCondicao(String condicao);

    String getCondicao();

    public static enum TipoBusca implements PadraoEnum {

        SIGLA("Sigla"),
        DESCRICAO("Descrição");

        private final String descricao;

        private TipoBusca(String descricao) {
            this.descricao = descricao;
        }

        @Override
        public String getDescricao() {
            return descricao;
        }

    }
}

GenericControladorCrud.java

package br.com.tebosoftware.controlador;

import br.com.tebosoftware.crud.Crud;
import br.com.tebosoftware.entidade.Entidade;
import br.com.tebosoftware.util.PropertyChangeListenerControlImpl;
import br.com.tebosoftware.util.Util;
import java.util.List;

/**
 *
 * @author Thales
 */
public abstract class GenericControladorCrud<E extends Entidade, C extends Crud<E>> extends PropertyChangeListenerControlImpl implements ControladorCrud<E> {

    private E entidade;
    private List<E> lista;
    private boolean inserindo = false;
    private boolean editando = false;
    private final C crud;

    public GenericControladorCrud(C crud) {
        this.crud = crud;
    }

    @Override
    public void setEntidade(E entidade) {
        if (!Util.isEqual(this.entidade, entidade)) {
            E old = this.entidade;
            this.entidade = entidade;
            firePropertyChange("entidade", old, this.entidade);
            firePodeTodos();
        }
    }

    @Override
    public E getEntidade() {
        return entidade;
    }

    private void setLista(List<E> lista) {
        if (!Util.isEqual(this.lista, lista)) {
            List<E> old = this.lista;
            this.lista = lista;
            firePropertyChange("lista", old, this.lista);
            if (this.lista != null && !this.lista.isEmpty()) {
                setEntidade(this.lista.get(0));
            } else {
                setEntidade(null);
            }
        }
    }

    @Override
    public List<E> getLista() {
        if (lista == null) {
            lista = Util.createList();
        }
        return lista;
    }

    private void setInserindo(boolean inserindo) {
        if (!Util.isEqual(this.inserindo, inserindo)) {
            boolean old = this.inserindo;
            this.inserindo = inserindo;
            firePropertyChange("inserindo", old, this.inserindo);
        }
    }

    @Override
    public boolean isInserindo() {
        return inserindo;
    }

    private void setEditando(boolean editando) {
        if (!Util.isEqual(this.editando, editando)) {
            boolean old = this.editando;
            this.editando = editando;
            firePropertyChange("editando", old, this.editando);
            firePodeTodos();
        }
    }

    @Override
    public boolean isEditando() {
        return editando;
    }

    protected C getCrud() {
        return crud;
    }

    @Override
    public void novo() {
        setEntidade(getCrud().novaEntidade());
        setInserindo(true);
        setEditando(true);
    }

    @Override
    public void editar() {
        if (isEditando() || getEntidade() == null) {
            return;
        }
        getCrud().atualizar(getEntidade());
        setInserindo(false);
        setEditando(true);
    }

    @Override
    public void excluir() {
        if (isEditando() || getEntidade() == null) {
            return;
        }
        getCrud().excluir(getEntidade());
        setEntidade(null);
        setInserindo(false);
        setEditando(false);
    }

    @Override
    public void gravar() {
        if (!isEditando() || getEntidade() == null) {
            return;
        }
        getCrud().gravar(getEntidade());
        setInserindo(false);
        setEditando(false);
    }

    @Override
    public void cancelar() {
        if (!isEditando() || getEntidade() == null) {
            return;
        }
        if (isInserindo()) {
            setEntidade(null);
        } else {
            getCrud().atualizar(getEntidade());
        };
        setInserindo(false);
        setEditando(false);
    }

    @Override
    public void pesquisar() {
        setLista(pesquisarInterno());
    }

    @Override
    public void atualizar() {
        if (entidade != null) {
            getCrud().atualizar(entidade);
        }
    }

    @Override
    public boolean isPodeInserir() {
        return !editando;
    }

    @Override
    public boolean isPodeEditar() {
        return entidade != null && !editando;
    }

    @Override
    public boolean isPodeExcluir() {
        return entidade != null && !editando;
    }

    protected abstract List<E> pesquisarInterno();

    protected void firePodeInserir() {
        boolean b = isPodeInserir();
        firePropertyChange("podeInserir", !b, b);
    }

    protected void firePodeEditar() {
        boolean b = isPodeEditar();
        firePropertyChange("podeEditar", !b, b);
    }

    protected void firePodeExcluir() {
        boolean b = isPodeExcluir();
        firePropertyChange("podeExcluir", !b, b);
    }

    protected void firePodeTodos() {
        firePodeInserir();
        firePodeEditar();
        firePodeExcluir();
    }
}

EstadoControladorCrudImpl.java

package br.com.tebosoftware.estado;

import br.com.tebosoftware.controlador.GenericControladorCrud;
import br.com.tebosoftware.util.StringUtil;
import br.com.tebosoftware.util.Util;
import java.util.List;

/**
 *
 * @author Thales
 */
public class EstadoControladorCrudImpl extends GenericControladorCrud<Estado, EstadoCrud> implements EstadoControladorCrud {

    private TipoBusca tipoBusca = TipoBusca.DESCRICAO;
    private String condicao;

    public EstadoControladorCrudImpl(EstadoCrud estadoCrud) {
        super(estadoCrud);
    }

    @Override
    protected List<Estado> pesquisarInterno() {
        switch (tipoBusca) {
            case SIGLA:
                return getCrud().listarPorSigla(StringUtil.preparaParametroString(condicao));
            case DESCRICAO:
                return getCrud().listarPorDescricao(StringUtil.preparaParametroString(condicao));
            default:
                return Util.createList();
        }
    }

    @Override
    public void setTipoBusca(TipoBusca tipoBusca) {
        if (!Util.isEqual(this.tipoBusca, tipoBusca)) {
            TipoBusca old = this.tipoBusca;
            this.tipoBusca = tipoBusca;
            firePropertyChange("tipoBusca", old, this.tipoBusca);
        }
    }

    @Override
    public TipoBusca getTipoBusca() {
        return tipoBusca;
    }

    @Override
    public void setCondicao(String condicao) {
        if (!Util.isEqual(this.condicao, condicao)) {
            String old = this.condicao;
            this.condicao = condicao;
            firePropertyChange("condicao", old, this.condicao);
        }
    }

    @Override
    public String getCondicao() {
        return condicao;
    }

}

FormCadEstado.java

package br.com.tebosoftware.estado;

import br.com.tebosoftware.controlador.ControladorFactory;
import br.com.tebosoftware.gui.GuiControladorCrud;
import br.com.tebosoftware.gui.Janela;
import br.com.tebosoftware.gui.componentes.ProcessandoDialog;
import br.com.tebosoftware.gui.componentes.FixedLengthDocument;
import br.com.tebosoftware.gui.componentes.IntegerOnlyDocument;
import br.com.tebosoftware.gui.componentes.PadraoEnumRenderer;
import java.awt.Component;
import java.awt.event.ActionListener;
import javax.swing.DefaultComboBoxModel;

/**
 *
 * @author Thales
 */
public class FormCadEstado extends javax.swing.JPanel implements Janela {

    private static final String TITULO = "Cadastro de Estados";

    private final EstadoControladorCrud controlador;
    private final GuiControladorCrud guiControladorCrud;

    /**
     * Creates new form FormCadEstado
     */
    public FormCadEstado() {
        controlador = ControladorFactory.createEstadoControladorCrud();
        initComponents();
        barraCrud.setControlador(controlador);
        cbxTipoBusca.setRenderer(new PadraoEnumRenderer());
        FixedLengthDocument.instalar(txtSigla, Estado.SIGLA_TAMANHO, FixedLengthDocument.TextCase.UPPER);
        FixedLengthDocument.instalar(txtDescricao, Estado.DESCRICAO_TAMANHO);
        IntegerOnlyDocument.instalar(txtCodigo, 2);
        guiControladorCrud = new GuiControladorCrud(controlador, tpnDados, pnlPesquisa, pnlRegistro, tabelaEstado) {

            @Override
            protected void aoMostrarPesquisa() {                
                txtCondicao.requestFocus();
                txtCondicao.selectAll();
            }

            @Override
            protected void aoMostrarRegistro() {
                if (controlador.isInserindo()) {
                    txtSigla.requestFocus();
                    txtSigla.selectAll();
                } else {
                    txtDescricao.requestFocus();
                    txtDescricao.selectAll();
                }
            }

        };
        pesquisar();
    }

    public EstadoControladorCrud getControlador() {
        return controlador;
    }

    private void pesquisar() {
        ProcessandoDialog.processar(() -> {
            controlador.pesquisar();
        });
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {
        java.awt.GridBagConstraints gridBagConstraints;
        bindingGroup = new org.jdesktop.beansbinding.BindingGroup();

        barraCrud = new br.com.tebosoftware.gui.componentes.BarraCrud();
        tpnDados = new javax.swing.JTabbedPane();
        pnlPesquisa = new javax.swing.JPanel();
        jPanel4 = new javax.swing.JPanel();
        btnPesquisar = new javax.swing.JButton();
        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        cbxTipoBusca = new javax.swing.JComboBox();
        txtCondicao = new javax.swing.JTextField();
        jScrollPane1 = new javax.swing.JScrollPane();
        tabelaEstado = new br.com.tebosoftware.estado.TabelaEstado();
        pnlRegistro = new javax.swing.JPanel();
        jPanel1 = new javax.swing.JPanel();
        jLabel3 = new javax.swing.JLabel();
        txtSigla = new javax.swing.JTextField();
        jLabel4 = new javax.swing.JLabel();
        txtDescricao = new javax.swing.JTextField();
        txtCodigo = new javax.swing.JTextField();
        jLabel5 = new javax.swing.JLabel();

        setLayout(new java.awt.BorderLayout());
        add(barraCrud, java.awt.BorderLayout.NORTH);

        pnlPesquisa.setLayout(new java.awt.BorderLayout());

        jPanel4.setLayout(new java.awt.GridBagLayout());

        btnPesquisar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/tebosoftware/imagens/pesquisar16.png"))); // NOI18N
        btnPesquisar.setText("Pesquisar");

        org.jdesktop.beansbinding.Binding binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, this, org.jdesktop.beansbinding.ELProperty.create("${not controlador.editando}"), btnPesquisar, org.jdesktop.beansbinding.BeanProperty.create("enabled"));
        bindingGroup.addBinding(binding);

        btnPesquisar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnPesquisarActionPerformed(evt);
            }
        });
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 2;
        gridBagConstraints.gridy = 0;
        gridBagConstraints.gridheight = 2;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTHWEST;
        gridBagConstraints.weightx = 1.0;
        gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
        jPanel4.add(btnPesquisar, gridBagConstraints);

        jLabel1.setText("Tipo de Busca:");
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 0;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
        gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
        jPanel4.add(jLabel1, gridBagConstraints);

        jLabel2.setText("Condição:");
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 1;
        gridBagConstraints.gridy = 0;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
        gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
        jPanel4.add(jLabel2, gridBagConstraints);

        cbxTipoBusca.setModel(new DefaultComboBoxModel(EstadoControladorCrud.TipoBusca.values()));

        binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, this, org.jdesktop.beansbinding.ELProperty.create("${controlador.tipoBusca}"), cbxTipoBusca, org.jdesktop.beansbinding.BeanProperty.create("selectedItem"));
        bindingGroup.addBinding(binding);
        binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, this, org.jdesktop.beansbinding.ELProperty.create("${not controlador.editando}"), cbxTipoBusca, org.jdesktop.beansbinding.BeanProperty.create("enabled"));
        bindingGroup.addBinding(binding);

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 1;
        gridBagConstraints.ipadx = 72;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
        gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
        jPanel4.add(cbxTipoBusca, gridBagConstraints);

        txtCondicao.setColumns(30);

        binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, this, org.jdesktop.beansbinding.ELProperty.create("${controlador.condicao}"), txtCondicao, org.jdesktop.beansbinding.BeanProperty.create("text"));
        bindingGroup.addBinding(binding);
        binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, this, org.jdesktop.beansbinding.ELProperty.create("${not controlador.editando}"), txtCondicao, org.jdesktop.beansbinding.BeanProperty.create("enabled"));
        bindingGroup.addBinding(binding);

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 1;
        gridBagConstraints.gridy = 1;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
        gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
        jPanel4.add(txtCondicao, gridBagConstraints);

        pnlPesquisa.add(jPanel4, java.awt.BorderLayout.NORTH);

        binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, this, org.jdesktop.beansbinding.ELProperty.create("${not controlador.editando}"), tabelaEstado, org.jdesktop.beansbinding.BeanProperty.create("enabled"));
        bindingGroup.addBinding(binding);
        binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, this, org.jdesktop.beansbinding.ELProperty.create("${controlador.lista}"), tabelaEstado, org.jdesktop.beansbinding.BeanProperty.create("lista"));
        bindingGroup.addBinding(binding);
        binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, this, org.jdesktop.beansbinding.ELProperty.create("${controlador.entidade}"), tabelaEstado, org.jdesktop.beansbinding.BeanProperty.create("valor"));
        bindingGroup.addBinding(binding);

        jScrollPane1.setViewportView(tabelaEstado);

        pnlPesquisa.add(jScrollPane1, java.awt.BorderLayout.CENTER);

        tpnDados.addTab("Pesquisa", pnlPesquisa);

        pnlRegistro.setLayout(new java.awt.GridBagLayout());

        jPanel1.setLayout(new java.awt.GridBagLayout());

        jLabel3.setText("Sigla:");
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.anchor = java.awt.GridBagConstraints.FIRST_LINE_START;
        gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
        jPanel1.add(jLabel3, gridBagConstraints);

        txtSigla.setColumns(3);

        binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, this, org.jdesktop.beansbinding.ELProperty.create("${controlador.entidade.sigla}"), txtSigla, org.jdesktop.beansbinding.BeanProperty.create("text"));
        bindingGroup.addBinding(binding);
        binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, this, org.jdesktop.beansbinding.ELProperty.create("${controlador.inserindo}"), txtSigla, org.jdesktop.beansbinding.BeanProperty.create("editable"));
        bindingGroup.addBinding(binding);

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 1;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.FIRST_LINE_START;
        gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
        jPanel1.add(txtSigla, gridBagConstraints);

        jLabel4.setText("Descrição:");
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.anchor = java.awt.GridBagConstraints.FIRST_LINE_START;
        gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
        jPanel1.add(jLabel4, gridBagConstraints);

        txtDescricao.setColumns(30);

        binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, this, org.jdesktop.beansbinding.ELProperty.create("${controlador.entidade.descricao}"), txtDescricao, org.jdesktop.beansbinding.BeanProperty.create("text"));
        bindingGroup.addBinding(binding);
        binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, this, org.jdesktop.beansbinding.ELProperty.create("${controlador.editando}"), txtDescricao, org.jdesktop.beansbinding.BeanProperty.create("editable"));
        bindingGroup.addBinding(binding);

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 1;
        gridBagConstraints.gridy = 1;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.FIRST_LINE_START;
        gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
        jPanel1.add(txtDescricao, gridBagConstraints);

        txtCodigo.setColumns(4);

        binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, this, org.jdesktop.beansbinding.ELProperty.create("${controlador.entidade.codigo}"), txtCodigo, org.jdesktop.beansbinding.BeanProperty.create("text"));
        bindingGroup.addBinding(binding);
        binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, this, org.jdesktop.beansbinding.ELProperty.create("${controlador.editando}"), txtCodigo, org.jdesktop.beansbinding.BeanProperty.create("editable"));
        bindingGroup.addBinding(binding);

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 2;
        gridBagConstraints.gridy = 1;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.FIRST_LINE_START;
        gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
        jPanel1.add(txtCodigo, gridBagConstraints);

        jLabel5.setText("Código:");
        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.anchor = java.awt.GridBagConstraints.FIRST_LINE_START;
        gridBagConstraints.insets = new java.awt.Insets(2, 2, 2, 2);
        jPanel1.add(jLabel5, gridBagConstraints);

        gridBagConstraints = new java.awt.GridBagConstraints();
        gridBagConstraints.gridx = 0;
        gridBagConstraints.gridy = 0;
        gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST;
        gridBagConstraints.weightx = 1.0;
        gridBagConstraints.weighty = 1.0;
        pnlRegistro.add(jPanel1, gridBagConstraints);

        tpnDados.addTab("Registro", pnlRegistro);

        add(tpnDados, java.awt.BorderLayout.CENTER);

        bindingGroup.bind();
    }// </editor-fold>                        

    private void btnPesquisarActionPerformed(java.awt.event.ActionEvent evt) {                                             
        pesquisar();
    }                                            


    // Variables declaration - do not modify                     
    private br.com.tebosoftware.gui.componentes.BarraCrud barraCrud;
    private javax.swing.JButton btnPesquisar;
    private javax.swing.JComboBox cbxTipoBusca;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel4;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JPanel pnlPesquisa;
    private javax.swing.JPanel pnlRegistro;
    private br.com.tebosoftware.estado.TabelaEstado tabelaEstado;
    private javax.swing.JTabbedPane tpnDados;
    private javax.swing.JTextField txtCodigo;
    private javax.swing.JTextField txtCondicao;
    private javax.swing.JTextField txtDescricao;
    private javax.swing.JTextField txtSigla;
    private org.jdesktop.beansbinding.BindingGroup bindingGroup;
    // End of variables declaration                   
    @Override
    public String getTitulo() {
        return TITULO;
    }

    @Override
    public boolean isPodeFechar() {
        return !controlador.isEditando();
    }

    @Override
    public void setFecharAction(ActionListener event) {
        barraCrud.fecharAction(event);
    }

    @Override
    public Component getComponent() {
        return this;
    }
}
  • Pessoal ninguém tem uma opinião sobre esse meu padrão?

    tebosoftware   15 de out de 2014
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

0 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags java swing ou faça a sua própria pergunta.