Boa noite gujeiros. Estou precisando de uma ajuda de vocês. Eu estou aprendendo Swing agora (com o NetBeans) e pintou um problema que eu não consegui resolver. Eu criei um JFrame e dentro dele coloquei um JDesktopPane, chamado principalDesktopPane.
Também adicionei um menuBar, e dentro dele coloquei um menu que tem um menuItem chamado Teste. O meu objetivo eu consegui, que era chamar um JInternalFrame dentro do meu JDesktopPane, a partir de um click no menuItem Teste. Abaixo está o código do evento.
private void clicaAquiMenuItemActionPerformed(java.awt.event.ActionEvent evt) {
meuNovoInternalFrame a = new meuNovoInternalFrame();
a.setVisible(true);
a.setSize(800,600);
principalDesktopPane.add(a);
}
Mas daí percebi o seguinte:
Quando coloco o programa para executar, ele funciona normal, abre o meu InternalFrame, mas daí, quando eu minimizo a janela principal, ele não minimiza também, ou então, caso eu sete o tamanho dele pra menor, ele não abre do tamanho da janela principal.
Resumindo, como eu faço pra que o meu JInternalFrame redimensione automaticamente conforme o meu Frame aumente ou diminua? Grato.
Acho que há duas maneiras de resolver. A primeira é você maximizar o JInternalFrame após inseri-lo no JDesktopPane:
A outra é você registrar um ComponentListener no seu JDesktopPane, e nesse ComponentListener redefinir o método componentResized(). Dentro de componentResized() você pode propagar o novo tamanho do JDesktopPane para os frames que estiverem contidos nele.
Agora só tem um probleminha. É que no JInternal tem um botão. Conforme meu JInternalFrame maximiza ou minimiza, ele muda de lugar na tela. Eu gostaria de deixá-lo centralizado sempre. Qual a propriedade em que eu seto esse valor? É alguma coisa do tipo, setAlinhamento(CENTRO) ?
Oddy: para que seu botão fique sempre centralizado, sugiro colocá-lo dentro de um JPanel (ou qualquer outro container), onde o LayoutManager desse JPanel é um FlowLayout. A propriedade Alignment do FlowLayout, por sua vez, deve ser ajustada para FlowLayout.CENTER.
Niksop: você fez tudo direito, só faltou definir o tamanho e a posição do JFrame - se você não fizer isso, o tamanho padrão é 0x0 e a posição padrão é 0,0. Experimente o seguinte:
[code] JFrame frame = new JFrame();
frame.setLayout(new BorderLayout());
JDesktopPane desktop = new JDesktopPane();
frame.add(desktop, BorderLayout.CENTER);
NewJInternalFrame internalFrame = new NewJInternalFrame();
desktop.add(internalFrame);
internalFrame.setVisible(true);
frame.setSize(500, 500);
frame.setLocation(50, 50);
frame.setVisible(true);