JinternalFrame abrindo outra JInternalFrame

Pessoal,
como faço para criar um novo JInternalFrame à partir de um JInternalFrame já existente. Estou tentando, mas não consigo acessar o método Add do meu JDesktopPane.
Qlq ajuda será válida.
[]'
Vinicius

Toti:

Realmente nunca vivi um caso igual o seu, porem, acho que o JDeskTopPane só funciona dentro de um JFrame.
Tente criar sem usar o JDesktopPane ok?

ate mais…

[quote=“Toti”]Pessoal,
como faço para criar um novo JInternalFrame à partir de um JInternalFrame já existente. Estou tentando, mas não consigo acessar o método Add do meu JDesktopPane.
Qlq ajuda será válida.
[]'
Vinicius[/quote]

É facil… apenas passe uma referencia do seu JDesktopPane para o JInternalFrame que vai abrir o novo JInternalFrame…

:lol: :lol:

Ola Hempx,
sim, foi o que eu tentei, mas o JDesktopPane está referenciado em uma classe “A”, que instancia e o JInternalFrame em outra classe “B”, entendeu?
Não consigo acessar os objetos da classe “A” à partir da classe “B”.
Alguma dica?

Grato pela sua resposta.
Att.,
Vinicius

[quote=“Toti”]Ola Hempx,
sim, foi o que eu tentei, mas o JDesktopPane está referenciado em uma classe “A”, que instancia e o JInternalFrame em outra classe “B”, entendeu?
Não consigo acessar os objetos da classe “A” à partir da classe “B”.
Alguma dica?

Grato pela sua resposta.
Att.,
Vinicius[/quote]

Entendi não… tem como passar um exemplo resumido do que está fazendo?
:arrow: Pra mim eh so vc passar uma referencia de A para B…
De preferencia pelo construtor…

class A {
   private JDesktopPane desktop;
   ...
   ....
   B b = new B( desktop );

}

class B {
   private JDesktopPane desktop;

   public B( JDesktopPane  desktop ) {
      this.desktop = desktop;
   }
}

Olá novamente Hempx. Segue o código resumido.
Essa é a minha classe SistemaRadio, onde tenho carregado o JDesktopPane. Note que instancio o JInternalFrame framePesquisaMusica como um objeto do tipo “PesquisaMusica”

import java.awt.event.*;

import javax.swing.*;

public class SistemaRadio extends JFrame {
	protected JDesktopPane DesktopSistema;
                private JRadioButtonMenuItem itensAparencia[];
	
	public SistemaRadio(){
		
		//constrói o GUI
		super("Sistema de Gerenciamento de Rádio");
     
                                //configura a área de trabalho
		DesktopSistema = new JDesktopPane();
		getContentPane().add(DesktopSistema);

		JInternalFrame framePesquisaMusica = new PesquisaMusica();
		DesktopSistema.add(framePesquisaMusica);
		framePesquisaMusica.setVisible(true);
		
		//configura a área de trabalho 
		setSize(640, 480);
		setVisible(true);
	}
	public static void main(String args[]){
		SistemaRadio app = new SistemaRadio();
		app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
}

e aqui está a classe PesquisaMusica

import java.awt.*;
import java.awt.event.*;
import br.com.canabrava.radio.*;
import javax.swing.*;
import javax.swing.table.*;

import java.sql.*;

public class PesquisaMusica extends JInternalFrame{
	//objetos utilizados antes da pesquisa
	protected Container container;
	private JPanel painelForm, painelResultados;
	private JLabel lblPesquisa, lblGenero;
	private JTextField txtPesquisa;
	private JComboBox comboGenero;
	private String arrGenero[];
	private JButton bttPesquisar;
	private JList listaResultados;
	
	//objetos utilizados durante ou após a pesquisa
	protected DefaultTableModel modelo;
	protected JTable tblResultados;
	private Statement stPesquisa;
	
	public PesquisaMusica(){
		
		super("Pesquisa de Faixas", false, true, false, true);
		
		//carrega o container
		container = getContentPane();
		container.setLayout(new BorderLayout());
		
		//carrega os painéis 
		painelForm = new JPanel();
		painelForm.setLayout(new GridLayout(1,5));
		painelResultados = new JPanel();
		
		//configura os itens da interface com o usuário
		lblPesquisa = new JLabel("Pesquisar por");
		txtPesquisa = new JTextField();
		lblGenero = new JLabel("Gênero");
		CarregaCombos Combo = new CarregaCombos();
		comboGenero = Combo.getCombo("genero", "genero");
		arrGenero = Combo.getArrayValores();
		bttPesquisar = new JButton("Pesquisar");
		
		bttPesquisar.addActionListener(
				new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				Pesquisar();
			}
		}
				);		
		
		//monta o painel do form
		painelForm.add(lblPesquisa);
		painelForm.add(txtPesquisa);
		painelForm.add(lblGenero);
		painelForm.add(comboGenero);
		painelForm.add(bttPesquisar);
		
		container.add(painelForm, BorderLayout.NORTH);
		
		setSize(600,300);
		setVisible(true);
	}
	
	//pesquisa de itens
	private void Pesquisar(){
		String Pesquisa, txtSQL;
		int CodigoGenero;
		
		//declaração das variáveis utilizadas			
		Pesquisa = txtPesquisa.getText();
		CodigoGenero = CodigoGenero = Integer.parseInt(arrGenero[comboGenero.getSelectedIndex()]);
		
		//comando SQL
		txtSQL = "SELECT CodigoMusica,"
		+"Musica,"
		+"Interprete"
		+" FROM Musica"
		+" ORDER BY CodigoMusica";
		
		//abre uma conexao com a base para realizar a pesquisa
		ConexaoBD appConexao = new ConexaoBD(); 
		Connection cnnPesquisa = appConexao.Conecta();
		
		try{
			stPesquisa = cnnPesquisa.createStatement();
			ResultSet rs = stPesquisa.executeQuery(txtSQL);
			ResultSetMetaData rsmd = rs.getMetaData();
			
			modelo = new DefaultTableModel();
			modelo.addColumn("Código");
			modelo.addColumn("Música");
			modelo.addColumn("Intérprete");
			
			int numColunas = rsmd.getColumnCount();
			
			while(rs.next()){
				String novaLinha[] = new String[numColunas];
				for(int pos=1; pos<=numColunas; pos++){
					novaLinha[pos-1] = rs.getString(pos);
				}
				modelo.addRow(novaLinha);
			}
			
			tblResultados = new JTable(modelo);
			
			tblResultados.setRowSelectionAllowed(true);
			tblResultados.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
			
			//tratador de eventos de clique na tabela
			tblResultados.addMouseListener(new MouseAdapter() 
					{ 
				public void mousePressed(MouseEvent e) 
				{ 
					if (e.getClickCount() == 1) 
					{ 
						int CodigoMusica = Integer.parseInt(tblResultados.getValueAt(tblResultados.getSelectedRow(), 0).toString());
						System.out.println("Código da faixa: "+ CodigoMusica);
						JInternalFrame frameEditarMusica = new CadastroMusica(CodigoMusica);
                 frameEditarMusica.setVisible(true);
					} 
				} 
			}); 

			painelResultados.add(new JScrollPane(tblResultados));
			
			container.add(painelResultados);
			
			container.setVisible(false);
			container.setVisible(true);
			
		}
		
		catch(SQLException SQLE){
			JOptionPane.showMessageDialog(null, "Ocorreu um erro ao tentar executar a pesquisa!", "Erro no cadastro", JOptionPane.ERROR_MESSAGE);
			SQLE.printStackTrace();
		}
		
		catch(ArrayIndexOutOfBoundsException AE){
			System.out.println("Erro ao carregar arrays");
		}
		catch(Exception e){
			System.out.println("Ocorreu um erro desconhecido. Imprimindo a pilha:");
			e.printStackTrace();
		}
	}
	
}

Na linha JInternalFrame frameEditarMusica = new CadastroMusica(CodigoMusica);, tento criar uma classe que já funciona quando chamada da classe “SistemaRadio”, porém, não consigo exibi-la, pois
não estou conseguindo acessar o JDesktopPane DesktopSistema da classe SistemaRadio.
Vc tem alguma idéia de como resolver isso?..tô perdidão já faz quase 1 semana…
[]'s e obrigado pela ajuda.
Att.,

faça o seguinte:

:arrow: No frame principal passe uma referencia do JDesktopPane

JInternalFrame framePesquisaMusica = new PesquisaMusica( DesktopSistema ); 

:arrow: Depois mude o construtor do seu PesquisaMusica(JInternalFrame)
para receber uma referencia do seu JDesktopPane e atribua ele a uma variavel da classe PesquisaMusica

public class PesquisaMusica extends JInternalFrame{
   //objetos utilizados antes da pesquisa
   protected Container container;
   private JPanel painelForm, painelResultados;
  ...
   //Nova referencia para seu JDesktopPane 
   private JDesktopPane DesktopSistema;

   //construtor modificado
   public PesquisaMusica( JDesktopPane DesktopSistema ){ 
      super("Pesquisa de Faixas", false, true, false, true); 
      this.DesktopSistema =  DesktopSistema;
      ...
    }
}

:arrow: Agora voce tem uma referencia do seu DesktopSistema na classe Pesquisa musica. Agora da pra voce fazer o que quiser com ele normalmente como fazia na classe do Frame principal

JInternalFrame frameEditarMusica = new CadastroMusica(CodigoMusica);
DesktopSistema.add(  frameEditarMusica );
frameEditarMusica.setVisible(true); 

:arrow: :lol: :lol: :lol: Testa e ve se da certo…

Toti,

Eu fiz praticamente o que o Hempx disse, só que eu passei o frame inteiro como referencia ( new FrameFilho( FramePai ) );
E no framePai eu tenho um m étodo que é criaFilho() para criar o internal frame que eu quiser…

Isso funciona perfeitamente aqui… :smiley:

Abraços,