Herança no Netbeans

14 respostas
JavaAprendiz

Pessoal,

tenho uma classe que cria um Jpanel

public class panel extends javax.swing.JPanel { ....

para mim fazer a herança faço

public class panel2 extends panel { ....
nada acontece

uso netbeans, alguem pode dar uma dica?

14 Respostas

Cabral

O que seria nada acontece???

cara, por convenção o Java inicia o nome das classes sempre em maiusculo

public class Panel extends javax.swing.JPanel {
R

O esquema de herança de componentes visuais no Netbeans não é tão simples assim, não basta fazer herança simples.
Você deve passar ao componente filho um containerDelegate.

De uma olhada nestes links, com certeza facilitará sua vida:
http://wiki.netbeans.org/wiki/view/FaqFormExtendingForms
http://wiki.netbeans.org/wiki/view/FaqFormCustomContainerBean

JavaAprendiz

Ricardo,

muito obrigado pela dica…

já estou decifrando o faq…

saudações

Ps:
Cabral,se não quer ou não sabe ajudar não atrapalha…

R

Opa, sem problemas…
Qualquer dúvida é só perguntar.

JavaAprendiz

Rivardo,

quebrei a cabeca estudando o faq....

sabe me dizer o que falta aqui...

classe pai:

package rh;

import java.beans.BeanDescriptor;

public class teste extends java.awt.Container {
    
    public teste() {
        initComponents();
    }
    
...        
     public BeanDescriptor getBeanDescriptor() {
    BeanDescriptor desc = new BeanDescriptor(teste.class);
    desc.setValue("containerDelegate", "getInnerPane");
    return desc;
}

    
}

e a classe filho...

package rh;


import java.beans.BeanDescriptor;

public class teste2 extends teste {
    
    /** Creates new form teste2 */
    public teste2() {
        
        initComponents();
      
...

  
    }
      
   ...
    
}
R

Vamos lá… O esquema para você fazer herança de JPanels no NetBeans é o seguinte:

1- A sua classe pai deve possuir um container vazio (ele será utilizado pela classe filha);

2- Este container vazio será passado para sua classe filha da seguinte forma:

public java.awt.Container getTemplateOperacoesPane() {
    return panelInterface;
} /* Finaliza o método getTemplateOperacoesPane. */

3- Você deve criar um container delegate para sua classe pai. Faça isto em uma outra classe da seguinte forma:

public class TemplateOperacoesBeanInfo extends SimpleBeanInfo {

    private BeanDescriptor beanDescriptor;

    public TemplateOperacoesBeanInfo() {
        super();
    }

    public java.beans.BeanDescriptor getBeanDescriptor() {
        if (beanDescriptor == null) {
            beanDescriptor = new BeanDescriptor(TemplateOperacoes.class);

            beanDescriptor.setValue("containerDelegate",
                    "getTemplateOperacoesPane");
        }

        return beanDescriptor;
    }

}

Como deu para perceber o nome da minha classe pai é TemplateOperacoes e o método que utilizo para passar o container vazio aos filhos é getTemplateOperacoesPane().

4- Nas suas classes filhas basta você herdar a classe pai que irá funcionar sem problemas. Você poderá definir qualquer componente ao container vazio passado pela classe pai. Os demais componentes não poderá ser alterados.

Acho que agora deu para entender legal né?
Qualquer dúvida é só perguntar…

JavaAprendiz

Ricardo,

lendo sua mensagem, agora percebo que nunca teria conseguido sozinho…

bem, na verdade ainda não consegui, mas estou próximo…

fiquei ainda com tres duvidas cruciais…

1.Os filhos devem chamar o metodo getTemplateOperacoesPane()?
se sim, utilizo esta forma?
nomedaclassefilho.getTemplateOperacoesPane()
neste caso, o método não estará retornando panelInterface do filho?

  1. Na classe pai devo invocar o metodo getBeanDescriptor() ?
    não compreendi o motivo da existencia da classe TemplateOperacoesBeanInfo e do metodo getBeanDescriptor() … ele retorna um beanDescriptor, mas não entendo para onde…

  2. Quanto ao container vazio, não entendi muito bem como definir…

mais uma vez te agradeço a boa vontade e o tempo despendido…

R

Então vamos lá.

1- Sim, os filhos irão utilizar o método getTemplateOperacoesPane(). Porém o netbeans fará isto automaticamente. Ao invés de adicionar no painel diretamente, ele irá adicionar no retorno deste método.

2- Você não precisa chamar o método getBeanDescriptor() em nenhum momento, ele será chamado automaticamente. Não se preocupe com ele.

3- Para a classe filha você deve passar um container vazio… Ou seja, você deve retornar a sua classe filha um container vazio (sem nenhum componente). Ele pode ser um JPanel.

E agora? Facilitou?
Conseguiu?

JavaAprendiz

O meu objetivo na verdade, é criar um jpanel com vários botões (pai)… a implementação dos botões irei fazer nas classes filhos depois que herdarem o jpanel do pai…

no seu exemplo eu não poderei alterar os componentes (no caso botões) herdados do pai… estou certo?

R

Você pode adicionar propriedades a estes botões e tal, basta eles terem o modificador protected ao invés de private. Quando digo que você não pode alterá-los, estou falando referente a interface gráfica.

Isto que lhe mostrei, apresenta como fazer a herança de interfaces gráficas utilizando o NetBeans.

Cabral

Cabaço… eu tentei ajudar… tanto é que não falei nada demais ali…

bom saber que é assim que voce responde…

boa sorte pra voce ai

JavaAprendiz

Mais uma vez , obrigado…

tenho certeza que agora conseguirei…

eu tento ler documentação em ingles, mas nem sempre consigo entender

Java é muito dificil de se aprender, mas tendo pessoas como tu para ajudar a gente não desanima tanto…

Valeu :smiley:

Ps:

Cabral, eu tento colocar os textos e códigos de forma bem resumida e simplificada, para não cansar quem está lendo e tentando ajudar…
como voce pode ler neste fórum, o fato de colocar um nome maiusc. ou min. com certeza é o menor dos meus problemas…

de qualquer forma, eu fui bastante indelicado… desculpa, e se puder continue ajudando os outros novatos desta seção, eles não são mau-educados que nem eu…

Cabral

eu só te sugeri, em momento algum te critiquei e digo isso pra você por que é o que eu li e ja me disseram se voce levou a mal não foi a minha intenção. Ainda escrevi S"por convenção" Não sou eu quem disse isso… alguém em algum lugar do mundo falou que era melhor assim. do que voce pegar um atributo e usa-lo assim obj.get_nom_prod_usu_id();

:wink:

JavaAprendiz

ok,

amigos então?

Criado 28 de março de 2007
Ultima resposta 29 de mar. de 2007
Respostas 14
Participantes 3