Como criar um JFrame para CRUD genérico

Olá pessoal,

sou novato na programação e mais ainda no Java Swing.

Estou desenvolvendo minha primeira aplicação, com a ajuda dos colegas do fórum e da faculdade, e bateu uma dúvida. Depois de fazer a segunda tela de cadastro, percebi que os componentes(JTable, Containers, menu e botões) são iguais, os métodos de posicionamento também, só as tabelas e os métodos do CRUD é que variam.
Tem como criar um JFrame genérico, com esses componentes e métodos comuns e depois criar JFrames específicos que extendão desse genérico?

Dei uma pesquisada e achei uns materiais que não entendi nada. Tem um que fala em usar interface, mas não entendi…

tentei fazer direto como falei e os componentes não aparecem no netbeans…

essa é a idéia da orientação a objetos…
na verdade não precisa nem criar várias ui (JFrame no caso)
Apenas 1…

quais sao os atributos do seu JFrame?
Faça um getter e setter deles…
e a cada vez que for instanciar o JFrame de um set nos atributos passando os parametros q vc quer…
entendeu?

Claro que é possível, não somente isso mas também códigos mais concentrados, robustos, flexíveis…
É possível criar classes para o CRUD do seu sistema também genéricas, que facilita ainda mais sua vida.

datatable -> crie teu proprio tableModel !
botoes / toolbars -> tente usar MVC(eu sei que é estranho pra Desktop), mas implemente os actionListeners em uma classe separada
menu -> vc sempre tem apenas um na tela principal, entao nao deve ser problema

Pessoal, desculpa a demora na resposta, estava pegado no trabalho e na faculdade…

Obrigado a todos pelas respostas…

alanrodrigues, nesse caso estou usando JInternalFrame, que tem os seguintes atributos:


// Variables declaration - do not modify                     
    private javax.swing.JButton btnDesativar;
    private javax.swing.JButton btnEditar;
    private javax.swing.JButton btnExcluir;
    private javax.swing.JButton btnFechar;
    private javax.swing.JButton btnNovo;
    private javax.swing.JButton btnPesquisar;
    private javax.swing.JLabel labCampoPesquisa;
    private javax.swing.JPanel panMenu;
    private javax.swing.JPanel panPesquisa;
    private javax.swing.JPanel panTabela;
    private javax.swing.JScrollPane scrPanTabela;
    private javax.swing.JFormattedTextField txfCampoPesquisa;
    // End of variables declaration       

// ATRIBUTOS
    protected ControleGenerico controle;
    protected boolean newObject;
    protected int indexRow;
    protected boolean[] edicaoColunas = { false, false };
    // ---> FIM ATRIBUTOS

// METODOS 
    public void setPosicao() {
        Dimension dimension = this.getDesktopPane().getSize();
        this.setLocation((dimension.width - this.getSize().width) / 5,
                (dimension.height - this.getSize().height) / 5);
    }
        
    public abstract void novo();
    
    public abstract void editar();
    
    public abstract void desativar();
    
    public abstract void excluir();
    
    public abstract JTable getTabela();
    
    public abstract TableModel getTableModel();
    
    public abstract List popularTabela();   
 
    public abstract void abrirGuiCadastroEntidade(ControleGenerico controle);
    
    public abstract void getTxfPesquisa();
    
    public abstract void pesquisarentidade(String str);

    // ---> FIM METODOS
    
    // METODOS ACESSO
    public boolean isNewObject() {
        return newObject;
    }

    public void setNewObject(boolean newObject) {
        this.newObject = newObject;
    }

    public boolean[] getEdicaoColunas() {
        return edicaoColunas;
    }
    // ---> FIM METODOS ACESSO

E estou usando um TableModel genérica, que extends AbstractTableModel, e as específicas que extends TableModel.

E nas GUIs não uso classes de negócio, apenas o controle. (Tentando usar um pouco de MVC)

Tentei usar a lógica das tabelas para as GUIs, mas não consegui, a ideia original seria criar uma JInternalFrame genérica, de CRUD, com esses componentes, atributos e métodos.
E quando eu quisesse implementar uma, eu dava um extends e beleza, só que parece que não funciona assim…

alanrodrigues, não entendi muito bem a sua orientação, poderia mostrar um trecho de código? Usando o que postei agora…