Me ajudem a corrigir a estrutura das classes PesTipoemailController e PesTipoemailFORM, de modos que:
Tenho uma classe persistente:
class PesTipoemail implements Serializable{
private Long id,
private String dsTipoemail;
//gets e sets
}
Tenho a seguinte TableModel:
class PesTipoEmailTableModel extends AbstractTableModel{
//implementação padrao
//com construtor sem parametros e outro que recebe uma List<PesTipoemail>
//métodos mais relevantes
public void addLista(List<PesTipoemail> tipoemails) {
int tamanhoAntigo = getRowCount();
rows.addAll(tipoemails);
fireTableRowsInserted(tamanhoAntigo, getRowCount() - 1);
}
public void limpar() {
rows.clear();
fireTableDataChanged();
}
}
Tenho o seguinte JDialog que é o meu formulário de inserção o qual possui apenas um campo para descrição do TIPO de EMAIL, a JTable que lista os já existentes, e um painelActions que contém os botões para CRUD:
class PesTipoemailFORM extends MyJACadastros {
private PesTipoemail tipoemail;
private PesTipoEmailTableModel tableModel;
public PesTipoemailFORM() {
super();
initConteudo();
ndsfDSTipoemail.requestFocus();
pack();
}
public JButton getGravarButton() {
return panelAcoes.btGravar;
}
public JButton getLimparButton() {
return panelAcoes.btLimpar;
}
public JButton getExcluirButton(){
return panelAcoes.btExcluir;
}
public void initConteudo() {
labelDSTipoemal = new JLabel("Tipo Email:");
ndsfDSTipoemail = new JTextField();
table = new JTable();
definirModelo();
initColumnSizes(table);
table.getTableHeader().setReorderingAllowed(false);
table.getTableHeader().setResizingAllowed(false);
table.setAutoCreateRowSorter(true);
//adiciona conteúdo do painel principal
panelConteudo.add(labelDSTipoemal, "");
panelConteudo.add(ndsfDSTipoemail, "gapright 2,growx, pushx, wrap");
panelConteudo.add(new JScrollPane(table), "spanx, growx,hmax 300");
}
public void registraTableMouseListener(MouseListener listener){
table.addMouseListener(listener);
}
private void definirModelo() {
tableModel = new PesTipoEmailTableModel();
table.setModel(tableModel);
table.setDefaultRenderer(Object.class, new MyCellRendererWithAlignment());
}
public void exibirListaNaTabela(List<PesTipoemail> list) {
tableModel.addLista(list);
}
public void limparTabela(){
tableModel.limpar();
}
public Long getIdSelecionado() {
if (table.getSelectedRow() > -1) {
Long id = new Long(tableModel.getValueAt(table.getSelectedRow(), 0).toString());
return id;
}
return null;
}
public void resetForm() {
ndsfDSTipoemail.setText("");
ndsfDSTipoemail.requestFocus();
}
private void mostrarDados(PesTipoemail m) {
ndsfDSTipoemail.setText(m.getDsTipoemail());
ndsfDSTipoemail.requestFocus();
}
private PesTipoemail obtemDados() {
if (tipoemail == null) {
tipoemail = new PesTipoemail();
}
tipoemail.setDsTipoemail(ndsfDSTipoemail.getText());
return tipoemail;
}
public PesTipoemail getTipoemail() {
obtemDados();
return tipoemail;
}
public void setTipoemail(PesTipoemail tipoemail) {
this.tipoemail = tipoemail;
mostrarDados(tipoemail);
}
private void initColumnSizes(JTable table) {
table.getColumnModel().getColumn(0).setMaxWidth(80);
}
}
E o seguinte controlador:
class PesTipoemailController{
private PesTipoemailDAO dao;
private final PesTipoemailFORM form;
private final SimpleDateFormat df;
private PesTipoemail tipoemail;
private List<PesTipoemail> listaTipoemail;
public PesTipoemailController() {
this.dao = new PesTipoemailDAOImpl();
this.form = new PesTipoemailFORM();
this.df = new SimpleDateFormat("dd/MM/yyyy");
this.tipoemail = null;
this.listaTipoemail = null;
implementaActionButtons();
}
public PesTipoemailController(PesTipoemailDAO dao) {
this();
this.dao = dao;
}
public static void main(String[] args) {
new PesTipoemailController().showUI();
}
/*
CONTROLE
*/
public void implementaActionButtons(){
form.getGravarButton().addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
gravar(form.getTipoemail());
listaTipoemail = listarTodos();
form.resetForm();
form.setTipoemail(novo());
form.limparTabela();
form.exibirListaNaTabela(listaTipoemail);
}
});
form.getLimparButton().addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
form.setTipoemail(novo());
}
});
form.getExcluirButton().addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
excluir(form.getTipoemail());
listaTipoemail = listarTodos();
form.resetForm();
form.setTipoemail(novo());
form.limparTabela();
form.exibirListaNaTabela(listaTipoemail);
}
});
}
public void showUI(){
form.exibirListaNaTabela(listarTodos());
form.registraTableMouseListener(new MouseListener() {
public void mouseClicked(MouseEvent e) {
if(e.getClickCount() == 2){
form.setTipoemail(buscarPorId(form.getIdSelecionado()));
}
}
public void mousePressed(MouseEvent e) {
}
public void mouseReleased(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
});
form.setVisible(true);
}
public PesTipoemail novo() {
tipoemail = new PesTipoemail();
return tipoemail;
}
/*
CRUD
*/
public boolean gravar(PesTipoemail tipoemail){
try{
if(tipoemail.getId() == null){
dao.save(tipoemail);
}else{
dao.update(tipoemail);
}
}catch(Exception e){
e.printStackTrace();
return false;
}
listaTipoemail = null;
return true;
}
public boolean excluir(PesTipoemail tipoemail){
try{
dao.delete(tipoemail);
}catch(Exception e){
return false;
}
listaTipoemail = null;
return true;
}
public PesTipoemail buscarPorId(Long id){
return dao.find(id);
}
public List<PesTipoemail> listarTodos(){
if(listaTipoemail == null){
listaTipoemail = dao.findAll();
}
return listaTipoemail;
}
public PesTipoemail getTipoemail() {
return tipoemail;
}
public void setTipoemail(PesTipoemail tipoemail) {
this.tipoemail = tipoemail;
}
}
Questões:
1 - Quanto aos eventos, eu estou tratando eles no lugar certo? Por exemplo: o evento do usuário clicar 2 vezes em uma linha da tabela, está certo capturar no controller e da maneira que está na linha 59?
2 - A ação de gravar: da linha 28 até a linha 38 no controller, está gerenciando todo o fluxo, isso está no lugar correto?
3 - Na linha 46 do FORM eu seto um cellrenderer. Está sendo feito corretamente?
4 - Na linha 29 do FORM eu chamo um método que está no final da classe para alterar largura da primeira coluna “Código”. Está correto?
Aceito qualquer tipo de crítica em relação à qualquer método ou estrutura das classes aqui dispostas, bem como do meu Post caso esteja incompreensivo.