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…
Abraços,