Simular um Dialog com um JinternalFrame

5 respostas
palerique

Caros,

Tenho uma janela pai que abre uma filha, as duas são JInternalFrame, mas queria que a janela Pai ficasse desabilitada para receber o foco / ser editada até que eu fechasse a janela filha ou clicasse em ok na janela filha, como eu faço isso?

ja tentei o pai.setEnabled(false) e o pai.setFacusable(false) mas não aconteceu absolutamente nada com esses comandos.

Alguém me ajuda???

Thx,
PH

5 Respostas

ViniGodoy

Não existem JInternalFrames modais.

palerique

Vini, como eu resolvo isso então?

Posso converter o JInternalFrame para algum tipo modal?

E

Um “JInternalFrame” “modal” pode ser simulado usando Glasspanes mas você vai ter um bocadinho de trabalho. Em particular, você tem de ser muito criterioso quanto ao tratamento de exceções - qualquer exceção mal-tratada, e você acaba tendo um glasspane que fica sempre sobre a sua aplicação, sem permitir a você fazer qualquer coisa.
Não estou encontrando o artigo da Java Developer Connection chamado “Creating Modal Internal Frames – Approach 1”, e “Creating Modal Internal Frames – Approach 2” - procure por eles na Internet. De qualquer forma, eles foram escritos para a versão 1.3 do Java, portanto pode ser que eles não funcionem direito mais.

ViniGodoy

Não resolve. Mude os JInternalFrames para JDialogs.
Se não quiser quebrar tanto o layout do seu programa, é fácil fazer a sua JDialog parecer um JInternalFrame.

Basta chamar no construtor:

setUndecorated(true); getRootPane().setWindowDecorationStyle(JRootPane.FRAME);

Eu já tentei usar essa solução que o Entanglement propôs mas, além de no fundo ser um xunxo, é recheada de problemas.
Não deve ter sido à toa que os artigos foram retirados do ar. Os glasspanes não funcionam tão bem quanto gostaríamos e não era incomum eles ganharem foco e o usuário ficar perdido. Sem falar que essa solução não resolvia bem a questão da dialog modal abrir outra modal.

Na prática, esse é mais um forte motivo pelo qual nem eu, e nem ele, recomendamos o uso de JInternalFrames.
Até mesmo a MS não faz mais aplicações contendo janelas modais, note que o próprio word, famoso por isso, já não trabalha mais assim faz tempo.

palerique

Não resolve. Mude os JInternalFrames para JDialogs.
Se não quiser quebrar tanto o layout do seu programa, é fácil fazer a sua JDialog parecer um JInternalFrame.

Basta chamar no construtor:

setUndecorated(true); getRootPane().setWindowDecorationStyle(JRootPane.FRAME);

Eu já tentei usar essa solução que o Entanglement propôs mas, além de no fundo ser um xunxo, é recheada de problemas.
Não deve ter sido à toa que os artigos foram retirados do ar. Os glasspanes não funcionam tão bem quanto gostaríamos e não era incomum eles ganharem foco e o usuário ficar perdido. Sem falar que essa solução não resolvia bem a questão da dialog modal abrir outra modal.

Na prática, esse é mais um forte motivo pelo qual nem eu, e nem ele, recomendamos o uso de JInternalFrames.
Até mesmo a MS não faz mais aplicações contendo janelas modais, note que o próprio word, famoso por isso, já não trabalha mais assim faz tempo.

Bom, eu mudei o extends da minha classe de JInternalFrame para o JDialog, não criou erro nenhum porém a janela não tem os componentes que deveria ter!

Nem as dimensões!

Os JDialogs passam pelo tal do jbInit()???

Ou terei que fazer tudo no construtor???

Criado 26 de julho de 2011
Ultima resposta 26 de jul. de 2011
Respostas 5
Participantes 3