Passando Classe como parâmetro

Pessoal tenho uma classe JFrame e várias classes JInternalFrame, como faço para chamar estas classes utilizando um único método tipo assim:

[code]
public void visualizaTela(???) {
Departamento dp = new Departamento();
jdpDesktop.add(dp);
dp.setLocation(1, 90);
dp.setVisible(true);
try {
dp.setSelected(true);
} catch (java.beans.PropertyVetoException e) {

    }

}[/code]

qual parâmetro devo setar neste método e como devo setar o parâmetro do método na chamada tipo assim:

visualizaTela(????);

Mas qual objeto voce quer passar?

Que código voce ta falando pra executar?

Estude OO.

Mas pelo visto voce quer passar um JComponent.

Olá edimil,

Na minha opinião você poderia fazer (nesse seu cenário) o seguinte:

Um enum para representar as telas que você pode/pretende abrir por este método:

[code]public enum Tela{

DEPARTAMENTO{
@Override
public JInternalFrame openWindow() {
//aqui você ter feito alguma outra coisa referente à tela Departamento que o invocador não fosse obrigado a saber…
return new JInternalFrame( “Departamento” );
}
},
FUNCIONARIO;

public JInternalFrame openWindow(){
return null; //aqui você define qual será o retorno default para um item que não o subscreva…
}
}[/code]

Através do método openWindow (coloquei esse nome, pois estou sem criatividade para nomes… :stuck_out_tongue: ) você poderia abrir a tela que fosse necessária a cada item do enum. Essa abordagem seria legal, pois ninguém além do enum saberia qual tela está sendo instanciada e você invocar os métodos particulares de cada tela dentro desse enum.

[code]public void visualizaTela( Tela tela ) {
JInternalFrame dp = tela.openWindow();

if ( dp == null ){
System.out.println( “não abriu a tela” );
return; //como defini que o valor padrão seria null, vou precisar tratá-lo de alguma forma… poderia ter lançado uma exceção… sei lá…
}

jdpDesktop.add(dp);
dp.setLocation(1, 90);
dp.setVisible(true);
try {
dp.setSelected(true);
} catch (java.beans.PropertyVetoException e) {

}  

}[/code]

Note que desta forma o visualiza tela não vai precisar conhecer a tela que está abrindo… ele apenas pega o enum e invoca o seu método. Este seLocation poderia estar dentro do enum se existir um valor diferente definido para cada tela…

visualizaTela( Tela.FUNCIONARIO ); 
visualizaTela( Tela.DEPARTAMENTO );

No botão ou qualquer lugar onde precisasse invocar esse visualiza tela você passaria apenas o enum necessário a abertura esperada.

Lógico que não conheço a sua aplicação… de repente posso ter proposto algo que não seja compatível com a seu ambiente… mas olhando apenas aquele trecho de código imaginei isso.

Em todo caso, seria interessante dar uma estudada melhor nos conceitos de OO (como já foi proposto) mas que possa avaliar melhor o seu cenário.

Espero ter ajudado,

[]s

[quote=eberson_oliveira]Olá edimil,

Na minha opinião você poderia fazer (nesse seu cenário) o seguinte:

Um enum para representar as telas que você pode/pretende abrir por este método:

[code]public enum Tela{

DEPARTAMENTO{
@Override
public JInternalFrame openWindow() {
//aqui você ter feito alguma outra coisa referente à tela Departamento que o invocador não fosse obrigado a saber…
return new JInternalFrame( “Departamento” );
}
},
FUNCIONARIO;

public JInternalFrame openWindow(){
return null; //aqui você define qual será o retorno default para um item que não o subscreva…
}
}[/code]

Através do método openWindow (coloquei esse nome, pois estou sem criatividade para nomes… :stuck_out_tongue: ) você poderia abrir a tela que fosse necessária a cada item do enum. Essa abordagem seria legal, pois ninguém além do enum saberia qual tela está sendo instanciada e você invocar os métodos particulares de cada tela dentro desse enum.

[code]public void visualizaTela( Tela tela ) {
JInternalFrame dp = tela.openWindow();

if ( dp == null ){
System.out.println( “não abriu a tela” );
return; //como defini que o valor padrão seria null, vou precisar tratá-lo de alguma forma… poderia ter lançado uma exceção… sei lá…
}

jdpDesktop.add(dp);
dp.setLocation(1, 90);
dp.setVisible(true);
try {
dp.setSelected(true);
} catch (java.beans.PropertyVetoException e) {

}  

}[/code]

Note que desta forma o visualiza tela não vai precisar conhecer a tela que está abrindo… ele apenas pega o enum e invoca o seu método. Este seLocation poderia estar dentro do enum se existir um valor diferente definido para cada tela…

visualizaTela( Tela.FUNCIONARIO ); 
visualizaTela( Tela.DEPARTAMENTO );

No botão ou qualquer lugar onde precisasse invocar esse visualiza tela você passaria apenas o enum necessário a abertura esperada.

Lógico que não conheço a sua aplicação… de repente posso ter proposto algo que não seja compatível com a seu ambiente… mas olhando apenas aquele trecho de código imaginei isso.

Em todo caso, seria interessante dar uma estudada melhor nos conceitos de OO (como já foi proposto) mas que possa avaliar melhor o seu cenário.

Espero ter ajudado,

[]s

Eberson é exatamente como vc entendeu, fiz como vc propôs, mas a minha tela não quer aparecer, não dá nenhum erro, onde posso ter errado, meu código está assim:

  public enum Tela {
        Departamento {
            @Override
            public JInternalFrame openWindow() {                
                return new JInternalFrame();
            }
        },
        Cargo;
        public JInternalFrame openWindow() {
            return null;
        }
    }

public void visualizaTela(Tela tela) {
        JInternalFrame window = tela.openWindow();        
        if (window == null) {
            System.out.println("não abriu a tela");
            return;
        }
        jdpDesktop.add(window);
        window.setLocation(1, 90);
        window.setVisible(true);
        try {
            window.setSelected(true);
        } catch (java.beans.PropertyVetoException e) {
        }
    }

private void jMenuItem4ActionPerformed(java.awt.event.ActionEvent evt) {                                           
    visualizaTela(Tela.Departamento);   
}

o construtor da classe Departamento está assim

public Departamento() {
        super("Cadastro de Departamento",true,true);
        initComponents();        
        setSize(800, 400);        
        setResizable(false);        
        objConexao.conecta();
        preencheTable(sqlTable);
        jTextField1.requestFocus();       
        setVisible(true);
    }

Desde já agradeço sua atenção…

[/quote]

[quote=Mark_Ameba]Mas qual objeto voce quer passar?

Que código voce ta falando pra executar?

Estude OO.

Mas pelo visto voce quer passar um JComponent.[/quote]

Mark_Ameba foi como o Eberson entendeu, veja sua citação, talves vc possa me ajudar, valeu!

Edimil,

O código do enum que te passei foi apenas para você ter uma idéia do que fazer. No caso da tela departamento você deveria fazer algo assim:

[code]public enum Tela {
Departamento {
@Override
public JInternalFrame openWindow() {
return new Departamento(); //aqui você chama a tela que quer realmente abrir
}
},
Cargo;

public JInternalFrame openWindow() {
return null;
}
}[/code]

Note que no enum Departamento eu mandei que abrisse a tela Departamento quando fosse invocado o método openWindow(). Imagino que a sua classe Departamento estenda JInternalFrame, correto?
Assim, para cada item que você adicionar no enum, você subsescreve o método openWindow e manda abrir a tela correspondente àquele item.

Entendeu?

[]s

Muito obrigado Eberson, deu certinho, é que eu ainda sou iniciante em java, mas com a ajuda de vocês acho que posso ficar bom, valeu mesmo, muito mesmo.