JFrame's

11 respostas
Lord_Java

Galera tô com uma duvida, mais acho que seja simples de resolver. Tô desenvolvendo um protótipo simples no ECLIPSE e tenho duas telas (JFrame) a primeira tenho 4 botões, ao clicar em um dos 4 aparecerá uma nova janela, então é aí que surgiu a duvida, preciso que o operador só consiga mexer na primeira janela se a segunda estiver fechada.

Espero que fui claro…

Desde já agradeço a todos que me ajudarem.

11 Respostas

Anime

Oi Lord Java,

Não entendi… :roll: …Como assim mexer…

Lord_Java

Quero que a segunda janela fique por cima da primeira de modo que eu não consiga clicar em nada da janela que tá atrás (primeira), só irei conseguir clicar em alguma coisa da primeira janela se a segunda janela estiver fechada.

makecio

na hora que vc chamar a nova janela (JFrame) voce da um this.setEnabled(false) na class anterior.

Anime

Para abri a segunda…Faça assim no primeiro frame…

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
     new seuframe().setVisible(true);
    }

para fechar a segunda…Faça assim no segundo frame…

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
     new seuframe().dispose(); 
    }

não sei se entendi…rs…

gertmuller

Eu acho que você está falando em um JDialog. Uma janela modal.

Você tem uma janela principal com 4 botões, onde cada um abre uma nova janela, certo? Você quer que o usuário só possa operar a janela principal quando ele fechar a janela secundária aberta, certo? Se for, então você vai criar a janela principal usando JFrame e as secundárias usando JDialog e tornado-as modais.

public class Principal extends JFrame {

}

public class Secundaria extends JDialog {
     public Secundaria() {
          this.setModal(true);
     }
}

Espero ter ajudado.

ViniGodoy
É isso mesmo. Só cuidado que é muito importante passar o pai em janelas modais:
public class Principal extends JFrame {

}

public class Secundaria extends JDialog {
     public Secundaria(JFrame pai) {
          super(pai, true); //O true indica que é modal
     }
}

Na hora de abrir, passe a principal como pai da secundária. Isso evita comportamento inconsistente no "alt+tab".

beowulf
ViniGodoy:
É isso mesmo. Só cuidado que é muito importante passar o pai em janelas modais:
public class Principal extends JFrame {

}

public class Secundaria extends JDialog {
     public Secundaria(JFrame pai) {
          super(pai, true); //O true indica que é modal
     }
}

Na hora de abrir, passe a principal como pai da secundária. Isso evita comportamento inconsistente no "alt+tab".

Entao era por isso que minha tela nao funcionava direito!
O post nao e meu, mais muito obrigado mesmo!
:)

ViniGodoy

beowulf:
Entao era por isso que minha tela nao funcionava direito!
O post nao e meu, mais muito obrigado mesmo!

A mesma observação vale para JOptionPanes. Vejo muita gente aqui no GUJ passando “null” no primeiro parâmetro, uma prática completamente errada.

gertmuller

Mas ViniGodoy,

tirando uma dúvida: mesmo sabendo que a prática pode ser considerada errada, se for o JFrame que instanciar e exibir o JDialog, o mesmo não saberá que foi o JFrame que o chamou? Qual o intuito de informar o pai ao JDialog se todas as outras janelas ficam desativadas durante a exibição do JDialog?

[]'s e obrigado.

ViniGodoy

Não sabe. O JDialog não tem como detectar onde ocorreu a sua instanciação. Por isso é necessário passar o JFrame como parâmetro.

A utilidade é que se o usuário fizer um ALT+TAB para cima do JFrame, o JFrame é capaz de tornar a dialog visível imediatamente. Sem o parâmetro, o que ocorre é que o JFrame fica visível, inacessível, e a dialog escondida atrás dele.

gertmuller

Muito interessante…

Pensei que isso fosse um problema inerente a janelas modais. Solucionei mais um problema q tinha em minhas aplicações.
Valeu!

Criado 9 de novembro de 2010
Ultima resposta 9 de nov. de 2010
Respostas 11
Participantes 6