Como fazer para a aplicação swing abrir no centro da tela?

26 respostas
P

Galera desenvolvi uma aplicação, mas a mesma sempre a abre na parte superior da tela, obs foi montada no NetBeans, qual a propriedade eu mudo para tal configuração ou onde coloco o código para funcionar?

26 Respostas

P

Resolvido:

public Cartao() {
       initComponents();
       setLocationRelativeTo(null);
D

para saber o tamanho da tela e centralizar um frame,

import java.awt.*;
import javax.swing.*;

public class CentrarTeste {
	
	public static void main(String[] args) {

		CentrarFrame frame = new CentrarFrame();
		frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
		frame.setVisible( true );
		
	}

}

class CentrarFrame extends JFrame{
	
	public CentrarFrame(){
		
		setTitle("CentrarTeste");
		setSize( DEFAULT_WIDTH, DEFAULT_HEIGHT );
		
		Toolkit kit = Toolkit.getDefaultToolkit();
		Dimension tamanhoTela = kit.getScreenSize();
		
		int width = tamanhoTela.width;
		int height = tamanhoTela.height;
		
		setLocation( width / 2, height / 2 );
		
	}
	
	public static final int DEFAULT_WIDTH = 300;
	public static final int DEFAULT_HEIGHT = 200;
	
}

espero ter ajudado.

C

Muito bom, eu tambem estava com essa duvida e as respostas foram bem esclarecedoras…

Boa !

R

Modifiquei o código para realmente aparecer centralizado:

this.setLocation(((Toolkit.getDefaultToolkit().getScreenSize().width  / 2) - (this.getWidth() / 2)), 
                ((Toolkit.getDefaultToolkit().getScreenSize().height / 2) - (this.getHeight() / 2)));
L

Pedrosa:
Galera desenvolvi uma aplicação, mas a mesma sempre a abre na parte superior da tela, obs foi montada no NetBeans, qual a propriedade eu mudo para tal configuração ou onde coloco o código para funcionar?

Faço assim;

import javax.swing.Box;

public class cpc001 extends javax.swing.JFrame {

java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();

setBounds((screenSize.width-490)/2, (screenSize.height-370)/2, 490, 370);

}

Espero ter ajudado
Lindberg

T

tentei todas estas opções e não consegui nenhuma :?

public class frmMainMenu extends JFrame {

	private static final long serialVersionUID = 1L;
	private JPanel jContentPane = null;
	private JButton jButtonClient = null;

	/**
	 * This is the default constructor
	 */
	public frmMainMenu() {
		super();
		initialize();	
	}

	/**
	 * This method initializes this
	 * 
	 * @return void
	 */
	private void initialize() {
		this.setSize(564, 367);
                this.setLocation(((Toolkit.getDefaultToolkit().getScreenSize().width  / 2) - (this.getWidth() / 2)),   
                        ((Toolkit.getDefaultToolkit().getScreenSize().height / 2) - (this.getHeight() / 2)));
		this.setContentPane(getJContentPane());
		this.setTitle("Jframe");
	}

	/**
	 * This method initializes jContentPane
	 * 
	 * @return javax.swing.JPanel
	 */
	private JPanel getJContentPane() {
		if (jContentPane == null) {
			jContentPane = new JPanel();
			jContentPane.setLayout(null);
			jContentPane.add(getJButtonClient(), null);
		}
		return jContentPane;
	}

	/**
	 * This method initializes jButtonClient	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getJButtonClient() {
		if (jButtonClient == null) {
			jButtonClient = new JButton();
			jButtonClient.setBounds(new Rectangle(15, 13, 143, 39));
			jButtonClient.setText("Clientes");
			jButtonClient.addMouseListener(new java.awt.event.MouseAdapter() {
				public void mouseClicked(java.awt.event.MouseEvent e) {
					new frmClient();
				}
			});
		}
		return jButtonClient;
	}

}
D

tmagostinho:
tentei todas estas opções e não consegui nenhuma :?

Tenta com esta

this.setLocationRelativeTo(null);//caso dentro da própria classe
nomeDaClasse.setLocationRelativeTo(null);//caso fora da classe
T

tenta usando o

setLocation(100,100);
D

t3sting:
tenta usando o

setLocation(100,100);


Assim ele apenas vai colocar o frame há ± 100pixels da esquerda e ± 100 pixels do topo…

T

drsmachado:
tmagostinho:
tentei todas estas opções e não consegui nenhuma :?

Tenta com esta

this.setLocationRelativeTo(null);//caso dentro da própria classe

nomeDaClasse.setLocationRelativeTo(null);//caso fora da classe

Pois essa também já tentei isso! :?
Já não sei que fazer!
Com o setLocation(100, 100); e nem mexe!

G

Se voce está usando JFrame ou JDialog deve usar deve usar Frame.setLocationRelativeTo(null);
dessa forma ele ira centralizar a tua tela.

Se você estiver usando o JinternalFrame ai tem que fazer um calculo para re-enderizar a tela no centro da aplicação se for o caso me responde que te envio o codigo para a centralização dos internal frame.

ate Jardel

D

Tem algo errado com o q vc tá fazendo.
setLocationRelativeTo(null); coloca o JFrame no centro da tela.
Acabei de testar, alterando o teu initialize

private void initialize() {
        this.setSize(564, 367);
//                this.setLocation(((Toolkit.getDefaultToolkit().getScreenSize().width  / 2) - (this.getWidth() / 2)),   
//                        ((Toolkit.getDefaultToolkit().getScreenSize().height / 2) - (this.getHeight() / 2)));
//        this.setContentPane(getJContentPane());
        this.setLocationRelativeTo(null);
        this.setTitle("Jframe");
    }

E com a classe

public class Chama {
    public static void main(String[] args_){
        frmMainMenu frm = new frmMainMenu();
        frm.setVisible(true);
    }
}

E o JFrame é aberto bem ao centro.

Mesmo com a chamada dentro da classe a saída da tela foi como eu esperava.

T

mas vc especificou a classe com

this.setLocation();

?

D

Giboty:
Se voce está usando JFrame ou JDialog deve usar deve usar Frame.setLocationRelativeTo(null);
dessa forma ele ira centralizar a tua tela.

Se você estiver usando o JinternalFrame ai tem que fazer um calculo para re-enderizar a tela no centro da aplicação se for o caso me responde que te envio o codigo para a centralização dos internal frame.

ate Jardel


Ele está utilizando um JFrame, o código está na pergunta do tópico.
E, sim, funciona como eu falei.
Problemas com a máquina dele.

T

Giboty:
Se voce está usando JFrame ou JDialog deve usar deve usar Frame.setLocationRelativeTo(null);
dessa forma ele ira centralizar a tua tela.

Se você estiver usando o JinternalFrame ai tem que fazer um calculo para re-enderizar a tela no centro da aplicação se for o caso me responde que te envio o codigo para a centralização dos internal frame.

ate Jardel

Estou a usar JFrame. mas para o que é também posso usar um JInternalFrame e fazer FullScreen.

D

Veja os códigos que postei acima, observe e modifique de acordo com o que coloquei.

T

drsmachado:
Giboty:
Se voce está usando JFrame ou JDialog deve usar deve usar Frame.setLocationRelativeTo(null);
dessa forma ele ira centralizar a tua tela.

Se você estiver usando o JinternalFrame ai tem que fazer um calculo para re-enderizar a tela no centro da aplicação se for o caso me responde que te envio o codigo para a centralização dos internal frame.

ate Jardel


Ele está utilizando um JFrame, o código está na pergunta do tópico.
E, sim, funciona como eu falei.
Problemas com a máquina dele.

Que tipo de problemas?
Eu estou a usar eclipse com o Visual Editor, no Windows 7 :?

eu no netBeans usava

setLocationRelativeTo(getRootPane()); mas aqui não funciona!

D

Eu uso o mesmo ambiente (eclipse + Windows 7 - 64b)
Segue aí o anexo com o print do resultado…


T

drsmachado:
Eu uso o mesmo ambiente (eclipse + Windows 7 - 64b)
Segue aí o anexo com o print do resultado…

A diferença entre os 32b e os 64b não tem nada a ver com isso :? realmente não entendo o que se passa :? desde que depois no .JAR funcione tudo é o que que importa.
O código que testou foi exactamente o que mandei da primiera vez certo?

D

Sim.
Aí vai ele.
Só comentei a linha do frmClient por não possuir esta classe.

public class frmMainMenu extends JFrame {

    private static final long serialVersionUID = 1L;
    private JPanel jContentPane = null;
    private JButton jButtonClient = null;

    /**
     * This is the default constructor
     */
    public frmMainMenu() {
        super();
        initialize();   
    }

    /**
     * This method initializes this
     * 
     * @return void
     */
    private void initialize() {
        this.setSize(564, 367);
//                this.setLocation(((Toolkit.getDefaultToolkit().getScreenSize().width  / 2) - (this.getWidth() / 2)),   
//                        ((Toolkit.getDefaultToolkit().getScreenSize().height / 2) - (this.getHeight() / 2)));
//        this.setContentPane(getJContentPane());
        this.setLocationRelativeTo(null);
        this.setTitle("Jframe");
    }

    /**
     * This method initializes jContentPane
     * 
     * @return javax.swing.JPanel
     */
    private JPanel getJContentPane() {
        if (jContentPane == null) {
            jContentPane = new JPanel();
            jContentPane.setLayout(null);
            jContentPane.add(getJButtonClient(), null);
        }
        return jContentPane;
    }

    /**
     * This method initializes jButtonClient    
     *  
     * @return javax.swing.JButton  
     */
    private JButton getJButtonClient() {
        if (jButtonClient == null) {
            jButtonClient = new JButton();
            jButtonClient.setBounds(new Rectangle(15, 13, 143, 39));
            jButtonClient.setText("Clientes");
            jButtonClient.addMouseListener(new java.awt.event.MouseAdapter() {
                public void mouseClicked(java.awt.event.MouseEvent e) {
                    //new frmClient();
                }
            });
        }
        return jButtonClient;
    }

    public static void main(String[] args_){
        frmMainMenu frm = new frmMainMenu();
        frm.setVisible(true);
    }
}
T

Na verdade o problema deve ser do meu computador, porque acontece o mesmo em todos os formulários! Ou poderá ser do próprio java?

D

Versão da JVM ou resolução de vídeo (mais provável)

G

Reinstala o java e ve o que da, mas a principio eh pra ta funcionando

T

Vou tentar essas opções! Muito obrigado pela ajuda! O pessoal aqui é 5*. Obrigado

A

Obrigado galera para mim o " setLocationRelativeTo(null); " funciono :).

P

Opa! sei que o post é antigo… mas estava procurando e não achei a resposta em lugar algum…
descobri e estou postando caso alguém não tenha conseguido…

setLocationRelativeTo(null);//aqui ele define que o canto superior esquerdo estará no meio da tela
		setLocation((int)getLocation().getX()-getWidth()/2, (int)getLocation().getY()-getHeight()/2); // agora ele alinha corretamente

retificando…

só o

setLocationRelativeTo(null);//aqui ele define que o canto superior esquerdo estará no meio da tela

resolve, estava dando erro pois após ele eu estava colocando um “setMinimumSize()”…

Criado 29 de maio de 2006
Ultima resposta 2 de abr. de 2014
Respostas 26
Participantes 11