[JPanel] Como descobrir o tamanho do JPanel?

Bom dia amigos, aqui estou eu logo de manhã vindo até você para me salvarem :lol:

Eu gostaria de saber o tamanho do JPanel para que um botão fique posicionado no centro do Programa independente da resolução ou tamanho que a tela do programa está (Maximizado, ou tamanho customizado pelo usuario).

Vamos lá, criei meu JPanel e coloquei o comando int larguraFundoJanela = fundoJanela.getWidth(); para pegar a largura do JPanel, segue o codigo parcial do meu programa:

JPanel fundoJanela = new JPanel(); fundoJanela = (JPanel) getContentPane(); fundoJanela.setBackground(Color.WHITE); int larguraFundoJanela = fundoJanela.getWidth();

Então, como eu poderia pegar a largura que a tela se encontra? Por que o tamanho do programa não será fixo, então terei que usar o centro (larguraFundoJanela / 2) como ponto de referencia para quando a pessoa mude o tamanho o layout não se altere.

Primeiro, voce faz new JPanel e não utiliza para nada.

Voce poderia fazer simples isso:

    JPanel fundoJanela = (JPanel) getContentPane();
    fundoJanela.setBackground(Color.WHITE);
    int larguraFundoJanela = fundoJanela.getWidth();

Segundo, se a tela ainda não foi exibida e ou método pack() não foi chamado getWidth provavelmente não mostrara o tamanho correto que o componente ira ficar.

Voce pode simplesmente setar o Layout do JFrame como BorderLayout e adicionar o JPanel em BorderLayout.center, assim independente da resolução o JPanel estará no meio.

[quote=Mark_Ameba]Primeiro, voce faz new JPanel e não utiliza para nada.

Voce poderia fazer simples isso:

    JPanel fundoJanela = (JPanel) getContentPane();
    fundoJanela.setBackground(Color.WHITE);
    int larguraFundoJanela = fundoJanela.getWidth();

Segundo, se a tela ainda não foi exibida e ou método pack() não foi chamado getWidth provavelmente não mostrara o tamanho correto que o componente ira ficar.

Voce pode simplesmente setar o Layout do JFrame como BorderLayout e adicionar o JPanel em BorderLayout.center, assim independente da resolução o JPanel estará no meio.[/quote]

Perdoe minha ignorancia, porem, não entendi muito bom, poderia me dar um exemplo pratico?

Vamos lá… explique direito!

O Mark disse certo: BorderLayout e center eh uma saída!

Mas vc pode tb fixar sua janela com o setResizable false!

Um problema q vc pode ter eh a largura/altura dos componentes ser maior que o tamanho da janela. Então, adicione-os em um frame, adicione este frame num scrollpane, e adicione o scrollpane no jpanel!

Mas to aguardando sua explicação mais detalhada!

Ok, vamos lá.
Como você pode ver em minha assinatura sou um estagiario, e sobra tudo pro estagiario :twisted:

Antes de começar quero deixar claro que nunca ultilizei GUI no Java, então, esse mundo de ambiente grafico no Java nasceu para mim ontem de manhã, então desculpe se eu não entender algum termo ou falar algo sem sentido.

Tenho que desenvolver um programa para controle de acesso de portaria, começei a desenvolver a parte visual dele ontem, e está da seguinte forma:
http://img72.imageshack.us/img72/8461/programarfid.png

Sobre o que eu pedi acima, eu gostaria que caso eu maximizase a tela esse conteudo ficase no centro e não no canto superior esquerdo, depois de muitas leituras, descobri teoricamente como colocar no centro, “basta” fazer um JPanel e colocar tudo isso dentro desse JPanel e colocar o JPanel como Center dentro do JFrame…

Como eu disse, só seu na teoria, tentei, tentei e ainda não consegui.

bom…
vc vai usar layouts, não?

faça algo do tipo:

//Declarar e inicializar os componentes JPanel painelPrincipal = new JPanel(); //adicione os componentes como quer... pode usar layout no jpane, inclusive um layout diferente do jframe painelPrincipal.setLayout(flowLayout); //Agora, coloque o panel num scrollpane //Pra q? //Pra não correr o risco da janela ficar menor que os componentes JScrollPane scroll = new JScrollPane(painelPrincipal); //agora, só colocar no frame, não esquecendo do layout JFrame meuJFrame = new JFrame(); meuJFrame.setLayout(new BorderLayout()); meuJFrame.add(painelPrincipal, BorderLayout.CENTER); //pronto. Fiz aki mesmo, na tora, então tem q colocar no eclipse/netbeans e ver se n tem erro de sintaxe //mas a idéia é essa... qq coisa chama nóis!

[quote=tkx]bom…
vc vai usar layouts, não?

faça algo do tipo:

//Declarar e inicializar os componentes JPanel painelPrincipal = new JPanel(); //adicione os componentes como quer... pode usar layout no jpane, inclusive um layout diferente do jframe painelPrincipal.setLayout(flowLayout); //Agora, coloque o panel num scrollpane //Pra q? //Pra não correr o risco da janela ficar menor que os componentes JScrollPane scroll = new JScrollPane(painelPrincipal); //agora, só colocar no frame, não esquecendo do layout JFrame meuJFrame = new JFrame(); meuJFrame.setLayout(new BorderLayout()); meuJFrame.add(painelPrincipal, BorderLayout.CENTER); //pronto. Fiz aki mesmo, na tora, então tem q colocar no eclipse/netbeans e ver se n tem erro de sintaxe //mas a idéia é essa... qq coisa chama nóis![/quote]

Só faltou depois de meuJFrame.add(painelPrincipal, BorderLayout.CENTER);

meuJFrame.pack();

Quando voce exibir a tela (setVisible(true)) o JPanel estara no meio.

Ola!.
Não sei se sua duvida já foi respondida mais eu uso isto para minha tela ao fechar ou minimizar ela volta no centro da tela independente das configurações de vídeo.

	Dimension tamanhoTela = Toolkit.getDefaultToolkit  ().getScreenSize();

	this.setLocation((tamanhoTela.width - this.getWidth()) / 2,

			(tamanhoTela.height - this.getHeight()) / 2);

Oque ele faz e pegar as dimensões da tela e dividir ela para colocar seu JPanel no centro.