[RESOLVIDO]Atualizar jFrame principal com o fechamento de outro jFrame

Boa noite,

Sou iniciante, portanto, preciso da ajuda de vocês.
Estou fazendo um programa através do Netbeans com a utilização da interface gráfica disponibilizada por ele.

Em meu frame principal quando solicito um novo cadastro, ele abre um novo frame,
porém gostaria de saber como fazer para que assim que eu clicasse em OK fosse possível fechar o frame de cadastro retornando ao frame principal,
atualizando o mesmo,
liberando alguns campos que havia declarado como setEditable(false),
pois alguns campos que irão complementar no cadastro
e dando requestFocus em um jTextField.

Desde já Agradeço,

Eduardo.

O ideal nesse caso é que a outra janela seja um JDialog modal. Veja um exemplo:
http://www.guj.com.br/java/55710-jdialog-devolvendo-valor-pra-jinternalframe#292687

Cara eu também só uso o JFrame pra janela principal do meu programa. O resto das janelas, você tem que usar o JDialog.
Quando eu instalo o netbeans ele não fica ali direto n parte (novo), mais e só ir ali em (Outros) que você acha ele.
Não sei se e correto oque eu falei, mais acho mesmo que o JFrame só se usa em janelas principais.

Agradecido pelas informações, tanto viniGodoy quando kelvinoenning.
Entretanto, não pude compreender perfeitamente o funcionamento do mesmo, pois não tenho conhecimento suficiente em implementar um programa somente na base de código.
Ou seja, em relação a este frame o JDialog, quando eu aloco um espaço na memória em meu jFramePrincipal mostrando o mesmo, ele passa por parâmetro meu jFrame Principal e uma variável boolean.

Minha dúvida é:

Qual a funcionalidade desta variável?
É possível passar por parâmetro minha variável de conexao com o banco e atualizar os dados no jFramePrincipal assim que finalizar o mesmo?

Não entendi direito oque você quis dizer.
Tem como postar o código que você esta testando?

Então Kelvin,

Acredito que o código não faça parte da dúvida, pois a minha preocupação está em criar um novo frame para que eu possa cadastrar.
Entretanto, após efetuar o cadastro e finalizar este frame, que seja atualizado o meu frame principal.

Conforme me orientaram, estou utilizando o JDialoag, mas de qualquer forma, não compreendo como farei a conexão.

Bom, pelo que eu entendi. Você poderia fazer um botão de “Sair” no JDialog, setando o digamos JDialog.setVisible(false); para a janela sumir e também setando as outras coisas que você quer.

Vou botar um exemplo:

botaoSair.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent arg0){
          //Códigos do botão.
          JDialog.setVisible(false); //Usei o nome próprio do JDialog como exemplo.
          Campo1.setEditable(true);
          Campo2.setEditable(true);
          //E mais o resto que precisar.
        }
    });

Pelo que deu pra mim entender, você estava fechando este JDialog pelo X próprio que vem nele neh? então criando um botão sair, você poderia definir ações alem de fechar a janela.

--------Edit
No caso ali você queria que ela fecha-se no próprio botão OK, então e só usar ele como sair e no final de todos os comandos, dar um setVisible(false); no JDialog.

[quote=cajubino]Entretanto, não pude compreender perfeitamente o funcionamento do mesmo, pois não tenho conhecimento suficiente em implementar um programa somente na base de código.
Ou seja, em relação a este frame o JDialog, quando eu aloco um espaço na memória em meu jFramePrincipal mostrando o mesmo, ele passa por parâmetro meu jFrame Principal e uma variável boolean.[/quote]

A diferença de um JDialog para um JFrame é que, quando você declara o JDialog como modal (e essa deve ser uma das opções na palheta dele no Netbeans), o método setVisible(true) só irá retornar quando o JDialog fechar.

Ou seja, no evento que você abre a janela você faz:

seuDialog.setVisible(true); //E esse código só roda depois que o Dialog fechar

Você pode declarar métodos no seu JDialog (e o netbeans permita que você faça isso), para retornar seus valores. Por exemplo:

public String getNome() { return txtNome.getText(); }

E então chamar esses métodos na janela que chamou o JDialog:

seuDialog.setVisible(true); String nomeSelecionado = seuDialog.getNome()

Não tente xunxar. Se você não entendeu o jeito certo, é melhor postar aqui suas dúvidas e se esforçar até entende-lo. Programar é bem diferente de “fazer funcionar”.
É preciso saber o que está fazendo.

Boa tarde Vini e Godoy;

Agradeço a ambos pelos esclarecimentos, sabendo-se que fico admirado pelo conhecimento que possuem e pela disponibilidade em poder compartilhá-los.

Realmente, o JDialog é o frame necessário para a minha necessidade,
além da possibilidade de declarar métodos no mesmo.

mas em relação ao JDialog.setVisible(false or true);
Consegui conectar, porém da seguinte forma:

onde costumava usar, porém não vem ao caso:

ou seja, diferente de JDialog.setVisible(true), conforme mostrado nas respostas acima, onde não há parâmetros na classe JDialog.
Estou conseguindo utilizar normalmente, mas só gostaria de compreender as divergências.

Olá. Vini e Godoy são a mesma pessoa. Acho que vc queria dizer Kelvin e Vini. :slight_smile:

Enfim, é bom sempre ler a documentação dos seus métodos:
http://docs.oracle.com/javase/6/docs/api/java/awt/Window.html#show()

Como vc pode ver aí, o método show() é deprecated desde o Java 1.5, e deve ser substituido pelo setVisible(true).
Não há diferença entre os dois.

O que faz o JDialog se tornar modal é a propriedade modal. Você pode fazer assim:

SeuDialog dlg = new SeuDialog(this); dlg.setModal(true); dlg.setVisible(true);

Um dialog modal é aquele que só permite que o usuário troque de janela se ele for fechado. O this, no construtor, define quem é a janela pai desse JDialog. O JOptionPane possui um parâmetro idêntico pois também é modal. É importante definir o pai pois caso contrário o comportamento pode ficar inconsistente quando os usuário alternam entre janelas do Windows com o dialog aberto.

PS: Aproveite e leia as 15 dicas úteis no uso de Swing.

Também vou mover esse tópico para o fórum de interface gráfica, já que de Java Básico ele não tem nada.

Perdão,

Agradecimentos a ViniGodoy e kelvinoenning.