[Resolvido] Centralizar JInternalFrame

Boa noite pessoal!

Bom, sou iniciante com desenvolvimento em Java Desktop e estou tentando criar um JDesktopPane com vários JInternalFrame dentro. Já consigo abrir eles, tudo certinho, mas, eles sempre abrem no canto esquerdo da tela. Tenho como, ao abri-los, centralizar na tela ?

Com os outros componentes eu usava o setLocationRelativeTo(null); , mas com os JInternalFrame não posso fazer isso…

Obrigado!

:lol:

2 curtidas

coloque esta função dentro de cada internal:

public void setPosicao() {
    Dimension d = this.getDesktopPane().getSize();
    this.setLocation((d.width - this.getSize().width) / 2, (d.height - this.getSize().height) / 2); }
}

e a invoque quando estiver criando cada internal

          Desktop.add(Internal);
          Internal.setVisible(true);
          Internal.setPosicao();
6 curtidas

Beleza! Resolvido :lol:

1 curtida

Obrigado, solução bem simples.

1 curtida

Excelente post!!!
Obrigado!

1 curtida

e carvalho não sei se você tem esse problema também, pois eu também sou novato e consegui desenvolver um método para gerenciar as JInternalFrames pois quando chamo elas, ao clicar em um Jbutton ou na barra de menu se tiver uma aberta o sistema abre outra acaba duplicando ou abrindo até mais que duas tres ou seja enquanto chamar JInternalFrames elas vão abrindo esse método não permite que isso aconteça vou publicar pra você aqui você cria um pacote pode ser UTIL ou do jeito que você preferir nomeá-lo e cria uma classe Java dentro dele com o nome GerenciadorDeJanelas ou da sua preferencia e cola esse código aqui que vou postar já incrementando a centralização que o amigo Junior Maia postou ai também e vou postar nos comentário os procedimentos a seguir:

/*

  • To change this license header, choose License Headers in Project Properties.
  • To change this template file, choose Tools | Templates
  • and open the template in the editor.
    /
    package util;
    import java.awt.Dimension;
    import javax.swing.JDesktopPane;
    import javax.swing.JInternalFrame;
    /
    *
  • @author Dmitruk
    */
    public class GerenteDeJanelas {
    private static JDesktopPane jdeskTopPane;
    public GerenteDeJanelas(JDesktopPane jdeskTopPane){
    GerenteDeJanelas.jdeskTopPane = jdeskTopPane;
    }
    public void abrirJanela(JInternalFrame jInternalFrame){
    if (jInternalFrame.isVisible()) {
    jInternalFrame.toFront();
    jInternalFrame.requestFocus();
    }else{
    jdeskTopPane.add(jInternalFrame);
    jInternalFrame.setVisible(true);
    Dimension d = jInternalFrame.getDesktopPane().getSize();
    jInternalFrame.setLocation((d.width - jInternalFrame.getSize().width) / 2, (d.height - jInternalFrame.getSize().height) / 2);
    }
    }
    }

então dentro do seu JInternalFrame no código fonte você faz o seguinte:

private static TelaLogin telalogin; // Aqui vc cria uma variável estática com o nome da classe.

// E dentro do código fonte da classe você cria o seguinte método:
public static TelaLogin getInstancia() {
if (telalogin == null) {
telalogin = new TelaLogin();
}
return telalogin;
}

E então dentro da classe principal onde tem o seu JDeskTopPane você digita o seguinte código:

this.gerenteDeJanelas = new GerenteDeJanelas(jdpPrincipal);

private void loginActionPerformed(java.awt.event.ActionEvent evt) {
gerenteDeJanelas.abrirJanela(TelaLogin.getInstancia());
}

Cara você e D+ resolveu minha duvida de forma simples.

muito bom @JuniorMaia solução bem simples

Marca como resposta correta, por favor. Abs

Grande ajuda. Valeu…