herança da interface gui

4 respostas
S

Pessoal, me surgiu uma duvida aqui agora!!

Vamos supor que tem uma classe Cadastrar, com toda a interface gui, o frame, os panel,os jtextfield, jlabel, botoes enfim…
ai se eu criar uma classe Editar e extender da clase Cadastrar, nessa classe editar, consigo mostrar a interface dela?

pq a ideia é assim, eu fiz a gui cadastrar, tudo certinho! Porem sempre se precisa editar um item que foi cadastrado, entao, pensei nessa possiilidade, é possivel isso com extends?

4 Respostas

oliversistemas

É possível sim.
Pelo que eu entendi você quer deixar um tipo de modelo pronto pra poder ser reutilizado. Mas lembre-se que sempre que você fizer alterações na Classe-mãe (Cadastrar) você terá reflexo nas filhas e iso pode te dar dores de cabeça.
Prefira construir classes-mãe o mais genéricas possível, deixando para serem realizados ajustes somente nas filhas.
Faça vários testes antes de adotar isto para um sistema complexo.
Se além da construção da tela você quiser diponibilizar métodos que manipulem diversos tipos de dados, leia sobre “Generics em Java”, é muito interessante.
Bons estudos!

discorpio

Boa noite a todos.

oliversistemas:
É possível sim.
…Mas lembre-se que sempre que você fizer alterações na Classe-mãe (Cadastrar) você terá reflexo nas filhas e iso pode te dar dores de cabeça.
Prefira construir classes-mãe o mais genéricas possível, deixando para serem realizados ajustes somente nas filhas.

Bons estudos!

Você pode evitar isso, construindo Interfaces ao invés de classes genéricas, até porque, com as interfaces você pode fazer multipla implementações de várias interfaces em uma única classe. enquanto que com uma classe genérica, sendo ela abstrata ou não, voce só pode extender (fazer herança) de uma única classe apenas.

Digo isto porque no design do seu projeto poderá haver métodos comuns a todas a classes, entretanto vai existir sempre algum método que só servirá a algumas classes e outras não, assim com as interfaces, voce só implementaria os métodos comuns a todas as classes, e se existir mais de um método que servirá a mais de uma classe, porém não todas, voce pode criar duas Interfaces, e é ai que mora a vantagem disto, onde caso uma classe que usuaria além dos métodos comuns, os outros não comuns, voce poderia implementar as duas interfaces na mesma classe.

Um abraço.

S

Obrigado pelas respostas!!Mas nem consegui fazer, na verdade eu fiz, mas n desse jeito!

Nicolas_Fernandes

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!

Criado 23 de julho de 2011
Ultima resposta 24 de jul. de 2011
Respostas 4
Participantes 4