Opa!
Cara, eu faço sempre assim:
- Crio uma classe com os atributos gerais de TODOS os formulários que eu vou usar:
public class InterfaceBase extends JDialog {
public InterfaceBase() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
setLayout( /*o Layout que você pretende usar*/ );
setResizable(false);
}
catch (Exception err) {
err.printStackTrace();
}
}
}
- Crio uma classe que será a base de Cadastros, por exemplo. Ela estenderá da base, que já estende de JDialog:
public class InterfaceCadastros extends InterfaceBase {
private JButton buttonConfirmar, buttonCancelar;
/*
Os métodos abstratos são pra controlar os eventos dos botões em cada um dos formulários.
Como são abstratos, precisam ser sobrescritos nas classes filhas. Portanto, em cada formulário
específico eles terão ações distintas!
*/
protected abstract void confirmar(ActionEvent event);
protected abstract void cancelar(ActionEvent event);
public InterfaceCadastros () {
super();
try {
/*
Adiciona os botões comuns a todas as interfaces de cadastros.
Adiciona qualquer componente que seja comum nas interfaces de cadastros.
Vou adicionar um pra Confirmar e um pra Cancelar, pra você ter uma ideia:
*/
buttonConfirmar = new JButton("Confirmar");
buttonConfirmar.addActionListener( new ActionListener() {
public void actionPerformed(ActionEvent event) {
confirmar(event);
}
});
buttonCancelar = new JButton("Cancelar");
buttonCancelar.addActionListener( new ActionListener() {
public void actionPerformed(ActionEvent event) {
cancelar(event);
}
});
}
catch (Exception err) {
err.printStackTrace();
}
}
}
- Agora, crio os formulários mais específicos:
Vou criar um para cadastrar Livros...
public class InterfaceCadastroLivros extends InterfaceCadastros {
@Override protected abstract void confirmar(ActionEvent event) {
JOptionPane.showMessageDialog("Confirmando na Interface de livros!");
}
@Override protected abstract void cancelar(ActionEvent event) {
JOptionPane.showMessageDialog("Cancelando na Interface de livros!");
}
public InterfaceCadastroLivros () {
super();
try {
/*
Adiciona as particularidades dos livros.
*/
}
catch (Exception err) {
err.printStackTrace();
}
}
}
Vou criar um para cadastrar gêneros...
public class InterfaceCadastroGeneros extends InterfaceCadastros {
@Override protected abstract void confirmar(ActionEvent event) {
JOptionPane.showMessageDialog("Confirmando na Interface de gêneros!");
}
@Override protected abstract void cancelar(ActionEvent event) {
JOptionPane.showMessageDialog("Cancelando na Interface de gêneros!");
}
public InterfaceCadastroGeneros() {
super();
try {
/*
Adiciona as particularidades dos gêneros.
*/
}
catch (Exception err) {
err.printStackTrace();
}
}
}
Se eu confirmar na formulário de livros, aparece a mensagem específica. Se eu confirmar no de gêneros, aparece outra específica. Ou seja, a ideia é o seguinte: você vai criando classes genéricas, macros, que contém tudo o que você precisa em TODOS os formulários... Após isso, você vai pegando o que é comum e agrupando em outras classes, como foi feito aí:
1. Criou-se a classe InterfaceBase, que contém TUDO o que TODOS os formulários precisam;
2. Criou-se a classe InterfaceCadastros, que contém TUDO o que TODOS os formulários precisam e TUDO o que as interfaces de cadastro precisam;
3. Criou-se a classe InterfaceCadastroLivros, que contém TUDO o que TODOS os formulários precisam e TUDO o que as interfaces de cadastro precisam e TUDO o que os cadastros de livros precisam.
Viu como funciona a herança em formulários?
Espero ter ajudado, abraços!