Olá pessoa,
Estou com um probleminha,
Eu tenho duas telas, GUICliente e GUICompra, que são abertas através de um JMenu.
Vamos supor que eu abra primeiro a GUICLiente, e de repente abro GUICompra. As duas ficam abertas na tela, porém, a que está na frente é a GUICompra.
Se eu quiser abrir GUICliente de novo, ele só abre depois que eu clicar duas vezes no menu.
Alguém pode me ajudar?
if(guiCompra == null){
guiCompra = new GUICompra();
}
desktopPane.add(guiCompra);
desktopPane.moveToFront(guiCompra);
guiCompra.setPosicao();
guiCompra.setVisible(true);
if (guiCliente == null) {
guiCliente = new GUICliente();
}
desktopPane.add(guiCliente);
desktopPane.moveToFront(guiCliente);
guiCliente.setVisible(true);
guiCliente.setPosicao();
Boa noite Cotonety.
Que tal mudar o seu código assim:
if (guiCompra == null){
guiCompra = new GUICompra();
desktopPane.add(guiCompra);
guiCompra.setVisible(true);
} else {
desktopPane.moveToFront(guiCompra);
}
O que estava acontecendo é que voce estava tentando adicionar ao DesktoPane o Form guiCompra toda vez que voce clicava no menu, sendo somente necessário acrescentá-lo uma única vez, mesmo que ele fique oculto, voce só aciona o comando moveToFront(…) pra ele ficar visível novamente.
Já o método setPosicao(), voce o coloca para ser acionado dentro do construtor de cada Form.
Faço o mesmo com o Form guiCliente.
Não deu certo
Coloqueri o setPosicao() no construtor e esse código, só que as telas não aparecem
Boa tarde Cotonety.
Todo JInternalFrame tem atributos que são “resizable”, “closable”, “maximizable”,“iconifiable”, e todos eles são do tipo booleano, e voce os configura invocando o construtor da super classe deste modo:
super("Compras", true, true, true, true);
.....
.....
pack();
Onde o primeiro parâmetro é o título, o segundo faz o JInternalFrame ser redimensionável, o terceiro abilita o seu fechamento, e o quarto diz que ele pode ser iconizado ou não, dependendo de como voce invoca o comando acima no construtor.
Outra coisa, eu prefiro utilizar o método pack() do que o setVisible(true), isto porque o pack() força a execução do método paint e todo o desenho do JInternalFrame. Assim sendo coloca os comandos acima em cada construtor de cada JInternalFrame, e nos Menus do Frame Principal, coloque o código abaixo:
if (guiCompra == null || guiCompra.isClosed()){
guiCompra = new GUICompra();
desktopPane.add(guiCompra);
} else {
guiCompra.toFront();
}