Redimensionamento automático do JFrame para adequar-se a tipos de tela diferentes

3 respostas
J

Olá pessoal!

Estou enfrentando um problema com a interface gráfica. :cry:
O problema é como redimensionar o JFrame de acordo com a resolução do computador a ser utilizado.

Como faço para ajustar esse impasse?
Todas a interface gráfica está pronta! E no final houve este pequeno problema que não foi pensado a tempo. :frowning:
Pensei em usar os layouts, mas bagunça todo o projeto.
Então utilizei o seguinte código lá no initComponents:

Toolkit.getDefaultToolkit().getScreenSize(); Toolkit.getDefaultToolkit().getScreenResolution();
Mas não funciona, tenho que adicionar mais algumas linhas de código?

Até.

3 Respostas

M
Toolkit kit = Toolkit.getDefaultToolkit();
Dimension tamTela = kit.getScreenSize();

//Pegando a largura total da tela
int larg = tamTela.width;

//Pegando a altura total da tela
int alt = tamTela.height;

/*Se você quiser que o seu JFrame ocupe 70% da tela por exemplo 
multiplique a largura e altura totais por 0,7*/

int minhaLargura= larg*0.7;
int minhaAltura = alt*0.7;

//Mandando o JFrame utilizar suas dimensões
setSize(minhaLargura,minhaAltura);
J

Oi.

Eu adicionei o código no initComponents,
quando executei, o JFrame redimencionou, mas os componentes não acompanharam, ou seja,
alguns ficaram cortados. :cry:

Tem como eu ajustar isso? Como?

Até.

M

Você vai ter que dar uma estudadinha nos gerenciadores de layout do java, conheça os padrões e depois sugiro o http://www.miglayout.com/.
Não é boa prática inserir seus componentes diretamente no JFrame, normalmente inserimos um ou mais JPanel dentro do JFrame e dentro dos JPanel seus componentes, caixas de texto, botões, etc.

Se seu JFrame usar apenas um JPanel, você poderá fazer como o exemplo abaixo:

//O JFrame usa o BorderLayout como gerenciador
JFrame frame = new JFrame()
frame.setLayout(new BorderLayout());

//O JPanel usa o MigLayout como gerenciador
JPanel panel = new JPanel(new MigLayout());

JLabel lblNome = new JLabel("Nome");
panel.add(lblNome, "width 20:30:40");

JTextField txtNome = new JTextField();
panel.add(txtNome, "width 100:150:200,wrap");

//Inserindo o JPanel no JFrame centralizado
frame.add(panel,BorderLayout.CENTER);
frame.pack();

Esse é só um exemplo, repare que no MigLayout esse comando “width 20:30:40” informa respectivamente a largura mínima, preferida e máxima, e você poderá escolher em qual unidade que estarão esses números que poderá ser pixels, mm, cm, percentual da tela entre outros, veja a documentação do MigLayout.

Criado 28 de fevereiro de 2012
Ultima resposta 28 de fev. de 2012
Respostas 3
Participantes 2