Componente criado, como reaproveitar os métodos?

5 respostas
P

Pessoal, tenho meus componentes criados, por exemplo, um painel de pesquisa com os campos que costumo utilizar, um painel com as operações : Novo, Apagar, Salvar, Editar, Pesquisar, enfim.

No caso destes painéis, para cada sistema eles terão funções específicas, mas o visual será o msm.

Agora, como eu faço para que quando clique no botão Novo, a “função” do botão seja realizada? O salvar, a mesma coisa, quero dizer, como e coloco a action para este botão customizada? De forma que eu possa reaproveitar os painéis mas customizar as opções salvar, novo, apagar, editar para o sistema especifico que eu estiver usando?

Exemplo: Em um sistema o botão salvar pega os dados do form e seta em um objeto que será salvo no banco, já em outra tela do sistema, esse mesmo painel utilizado o botao salvar vai adicionar objetos a uma lista e salvar a lista. O campo pesquisa a mesma coisa. A cada momento pode ser utilizado de uma forma diferente.

Agradeço ajuda.

5 Respostas

Renato_Ceadareanu

Putz… nao deu pra entender bem o que voce quis dizer, mas o que parece mais viável é voce efetuar a criação desse componente com parâmetros que são montados dinamicamente na chamada dos métodos para criação dessas tags.

Se nao for isso, explica melhor, a arquitetura, como está seu componente e tal :smiley:

Abraços

rmendes08

Eu faria da seguinte forma: criaria uma interface que contém as operações que o painel suporta. No painel, eu criaria uma variável privada do tipo dessa interface, e nos eventos do painel eu chamaria os métodos dessa variável, de forma que eu não precisasse mexer nos tratamentos de eventos futuramente. Posteriormente, para fornecer a implementação, basta escrevê-la em uma classe que implementa a tal interface e fazer um set no painel.

Marky.Vasconcelos

Herança também serveria.

Mas o caso da Interface é mais interessante.

P

Sou iniciante, nao manjei muito essa parada da interface e criar uma variável do tipo da interface e depois dar um “set no painel” (essa parte nao compreendi!).

Bem, primeiro, é ambiente desktop, nada de tags, web, js*.

Segundo:
Eu uso muito os botões salvar e fechar para forms, e também um painel de pesquisa com 3 campos (nome, sobrenome, matricula, por ex.)
O que eu quero, é evitar ficar copiando e colando e vasculhando código pra “reaproveitar” dessa forma. EU QUERO criar um painel com dois botoes por exemplo: Fechar e salvar, e gostaria que esse painel com 2 botoes funcionasse em qualquer form q eu utilizar.

Vou descrever o exemplo:
Eu criei o painel, adicionei os botoes (tudo no netbeans 6.5), salvei e gerei um jar.

O problema agora é que, eu coloco o componente em uma janela com um form, e quando clico no botao salvar desse compone te que criei, ele deveria chamar uma ação onde pegasse os dados do form, setasse em um objeto e salvasse no banco de dados.

Já em outra janela, eu nao tenho mais um form, eu tenho uma tabela, que exibe os dados do form, de vários forms que cadastrei, então, eu, como usuário quero deletar a linha de uma tabela, que representa um cadastro, enfim, detalhes a parte, o que eu tenho é uma lista de cadastros (objetos) e gostaria de que após apagar, quando eu clicar no botão salvar, do mesmo painel que criei como um componente, só que agora em outra janela, realizasse o update dessa lista de cadastros (objetos). Entendido?

Não preciso saber como fazer as operações ai, foi so um exemplo, eu quero mesmo saber como generalizar esse componente de forma que eu possa reutilizar ele em qualquer janela, em qualquer form.

Só mais um detalhe, esse componente já esta extendendo JPanel, quando eu crio um form, normalmente uso um JDialog, ou seja, a janela já extende alguma coisa, logo, não dá pra extender a classe desse componente na janela do form. Logo, tem que haver outra forma de interagir com esses botões genericamente. É isso que eu quero fazer!

Ficou mais claro? Se puderem me explique melhor como funciona o esquema da interface, e tipo, eu teria que criar esta interface no mesmo pacote do componente e depois qnd eu for usar eu tenho q implementar essa interface, correto? Mas ainda nao entendi o que o colega falou de setar o painel. Gostaria de ter isso mais bem explicado, agradeço muito a ajuda!

P

Eu fiz o seguinte, consegui imprimir os System.out com o nome das ações, axo que vou testar mais pra ver se o resultado agrada.
Código da classe JDialog (janela)

public class NewJDialog extends javax.swing.JDialog implements com.br.controle.operacoes.ControleOperacao{

    /** Creates new form NewJDialog */
    public NewJDialog(java.awt.Frame parent, boolean modal) {
        super(parent, modal);
        initComponents();
        painelSalvarFechar1.setControle(this); //esse eh o nome do painel
    }

Esse é o código do componente resumido
Coloquei uma variável controle, do tipo de uma interface

public class PainelSalvarFechar extends javax.swing.JPanel{
    private ControleOperacao controle;
    
    /** Creates new form PainelSalvarFechar */
    public PainelSalvarFechar() {
        initComponents();
    }
  
    ...

    private void btoSalvarActionPerformed(java.awt.event.ActionEvent evt) {                                          
        getControle().actionSalvar();
    }                                         

    private void btoCancelarActionPerformed(java.awt.event.ActionEvent evt) {                                            
        getControle().actionFechar();
    }                                           
    // Variables declaration - do not modify
    private javax.swing.JButton btoCancelar;
    private javax.swing.JButton btoSalvar;
    // End of variables declaration

    public ControleOperacao getControle() {
        return controle;
    }

    public void setControle(ControleOperacao controle) {
        this.controle = controle;
    }

código da interface

public interface ControleOperacao{
    public void actionSalvar();
    public void actionFechar();
}

Bem simples, funcionou até agora, vou fazer mais testes, agora só falta alguem me responder a estas dúvidas:
Isso é comum, a forma como fiz?
É correto?
É assim que voces sugeriram acima?
Obrigado.

Criado 1 de junho de 2009
Ultima resposta 1 de jun. de 2009
Respostas 5
Participantes 4