Olá pessoal,
Estou desenvolvendo um app pra desk, e num determinado momento instancio vários objetos de uma mesma classe. Essa classe é um modelo de um Panel que contém um tabela, ou seja, cada objeto instanciado é adicionado num jTabbedPane eis o código:
Digitacao_teste d = new Digitacao_teste();
plan++;
planilhas.addTab("Plan"+plan, new javax.swing.ImageIcon(getClass().getResource("/com/vitticontabil/lancamentoscontabeis/midia/icones/table.png")), d);
Agora preciso salvar o conteúdo destas tabelas (vou salvar em arquivos), ou seja, preciso pegar um objeto que já instanciei (do tipo Digitacao), para chamar um método que criei que me retorna o conteúdo que preciso.
Não sei se fui claro o bastante, mas minha dúvida é essa, preciso saber como pego objetos já instanciados.
Obrigado desde já.
Você quer pegar esses objetos instanciados onde?? Em outra classe? (Se sim, por que nao passa a referencia deles por parâmetro?)
Bem, pelo que deu para entender, teu objeto foi instanciado com o identificador d.
Cada objeto instanciado tem um identificador.
E ele tem os métodos para usar o conteúdo digitado.
entao simplesmente execute esse metodo com
d.metodoAExecutar()
e se ele retornar algo coloque isso em uma variavel ou objeto e com isso faca o salvamento.
Dificil entender diferente o que vc escreveu, sinto se nao for isso.
Ou vc quer dizer que instanciou, adicionou ao TabbedPane e depois perdeu a referencia?
Se for isso, use o proprio TabbedPane e use um get que retorne o conteudo dele colocando
em identificadores novos.
Se puder postar o codigo mais completo ficarah mais facil de entender.
Mauricio obrigado pela resposta, mas não era bem isso!
Na verdade o que eu preciso é recuperar os objetos do tipo “Digitacao_teste” que eu já instanciei. Na minha ignorância, acho que tenho que fazer um:
for(int i = 0; i < planilhas.getComponentCount(); i++){
Digitacao_teste dt = (Digitacao_teste) planilhas.getComponent(i).getClass();
dt.gravarDados();
}
mas não deu certo!
Aquele código que eu passei está dentro de um botão (eis o código completo):
private void planilhasMouseClicked(java.awt.event.MouseEvent evt) {
if(planilhas.getSelectedComponent().equals(novaPlan)){
planilhas.remove(novaPlan);
Digitacao_teste d = new Digitacao_teste();
plan++;
planilhas.addTab("Plan"+plan, new javax.swing.ImageIcon(getClass().getResource("/com/vitticontabil/lancamentoscontabeis/midia/icones/table.png")), d);
planilhas.addTab("", new javax.swing.ImageIcon(getClass().getResource("/com/vitticontabil/lancamentoscontabeis/midia/icones/table_add.png")), novaPlan);
planilhas.setSelectedComponent(d);
d.requestFocus();
}
}
E
Ok, Entendo que esteja dentro de um botão, mas você não precisa criar o identificador dentro do botão.
Por que não coloca o codigo
Digitacao_teste d;
Fora do botão, como um atributo private e dentro do botão só coloca o resto:
d = new Digitacao_teste();
Assim ele estará disponível para outros metodos comparativos.
ou
Imaginando que estas classes Digitacao sejam herdantes de algo, crie um array tipo:
Pai_Digitacao d[5];
int conta = 0;
E depois no botão vá instanciando Digitacoes especificas e atrelando a cada elemento
do array para poder usar depois.
Oque eh essa novaPlan que aparece no if dentro do evento do botao?
Voce ta criando um painel e comparando com o que estah no TabbedPane?
Como funciona esse processo?
Pelo que entendi você cria um novo Painel e compara com o painel que
estah no Tabbed, se for igual você remove ele, e Daih cria um novo
do tipo Digitacao_Teste. É isso mesmo?
Desculpe mas tá dificil de entender.
E se na tua classe Digitacao tem o metodo de gravacao, nao vejo por que precisa
comparar para ver se uma eh aquela ou outra. Afinal isso a Orientacao a Objetos
garante.
Se eu clicar em gravar dentro do painel, ele vai acionar o metodo gravar daquele
objeto que estah no painel que estah sendo gravado. Nao precisa comparar para
ver se eh de outro.
Fiz um projetinho e coloquei em anexo. Usando um pouco do teu codigo, quem sabe
te dá alguma ideia.
Pessoal, desculpe estar dando tanto trabalho e obrigado pelos esforços!
Vou tentar explicar melhor: nessa app, tive que reinventar a roda (¬¬"), essa funcionalidade do sistema se parece com o excel. Tenho um Painel vazio (painel novaPlan) no JTabbed com um ícone só para o usuário clicar e adicionar uma nova aba com uma tabela (classe Digitacao_teste). Só que, não querem que cada tabela tenha seu botão salvar, a tela deve conter apenas um botão que salva todas as tabelas abertas! Òó
Por isso, quando o botão salvar (código abaixo) é clicado, eu preciso percorrer o JTabbed e ir salvando os objetos Digitacao_teste que já foram instanciados!!! tentei isso:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
for(int i = 0; i < planilhas.getComponentCount(); i++){
Object o = planilhas.getComponentAt(i).getClass();
if(o instanceof Digitacao_teste){
Digitacao_teste dt = (Digitacao_teste) o;
dt.gravarDados();
}
}
}
mas ainda nao deu certo!
obrigado a todos
Tá, mas se é isso, esse código deve servir:
for(int i=0; i<planilhas.getComponentCount(); i++){
try{
Digitacao_teste d = (Digitacao_teste) planilhas.getComponentAt(i);
d.salvarInformacoes();
}
catch(Exception ex){}
}
Isso vai correr todos os componentes e ativar o metodo de salvamento de cada um
seja lá qual for.
O try é apenas para evitar que a conversao de um outro tipo de componente que nao
seja realmente uma planilha atrapalhe a operacao de salvamento de todos.
E se quiser salvar apenas a que está selecionada, use um if dentro do try:
for (int i = 0; i < planilhas.getComponentCount(); i++) {
try {
Digitacao_teste d = (Digitacao_teste) planilhas.getComponentAt(i);
if (planilhas.getSelectedComponent().equals(d))
{
d.salvarInformacoes();
}
} catch(Exception ex){}
}
Ok, man muito obrigado deu certo aqui! eu já tinha conseguido um pouco antes de vc postar, mas optei pela sua maneira, acho que o código ficou mais limpo! O jeito que eu havia feito foi assim:
ArrayList <Object> pln = new ArrayList<Object>();
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
for(int i = 0; i < pln.size(); i++){
Digitacao_teste dt = (Digitacao_teste) pln.get(i);
if(!dt.gravarDados()){
break;
}
}
desse jeito dei muitas voltas e declarei coisas que nao precisavam! hehehe, mas obrigado mesmo!
obs.: vou ter que fazer o botao pra salvar um só tbm! rsrs vlw
Se ja esta tudo OK…
Coloque–> [RESOLVIDO] , Lá na pergunta =D