Alinhar conteúdo no top da janela com JFrame [Resolvido]

9 respostas
P

Fala moçada blz?

Alguém sabe como deixar o conteúdo no topo da janela com a classe JFrame. Por padrão o conteúdo é alinhado no meio da janela (Foi isso que eu entendi fuçando a Internet).

A todos que reponderem agradeço desde já.

9 Respostas

T

Bom dia!
Dica: leia sobre layouts!
Tem diversos, cada um mais ou menos adequados para o q vc precisa!
FlowLayout, AbsoluteLayout, GridLayout, GridBagLayout (recomendado), dentre outros!

Tem um tuto sobre gridbag: http://javafree.uol.com.br/artigo/5792/Tudo-sobre-o-GridBagLayout.html

Se vc associar gridbaglayout com panels no JFrame vai ficar 200% bom!

Dúvidas, pregunte!

P

Olá Tkx,

na realidade eu queria deixar o texto no topo com os próprios recursos da classe Jframe. Segue um exemplo abaixo para melhor ilustrar minha dúvida.

import javax.swing.*;

public class Janela extends JFrame {

public Janela() {
	this.setTitle("Janela com JFrame");
	
	this.setVisible(true);
	
	this.setSize(600,400);
	
	[b]this.add(new JLabel("Como deixar esse texto no topo da janela"));[/b]
	
	this.setDefaultCloseOperation(EXIT_ON_CLOSE);
}

public static void main ( String [] args ) {
	new Janela();
}

}

T

Bom... só com os componentes do JFrame, só com muita POG!

Não é difícil usar layouts!

Veja sua janela-exemplo com border layout:

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

public class Janela extends JFrame {

    private BorderLayout border = new BorderLayout();

    public Janela() {
        this.setTitle("Janela com JFrame");

        this.setVisible(true);

        this.setSize(600, 400);

        this.setLayout(border);

        this.add(new JLabel("Como deixar esse texto no topo da janela"), BorderLayout.NORTH);

        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    }

    public static void main(String[] args) {
        new Janela();
    }
}
T

PHPimenta...

Coloquei em um panel o label e ficou alinhado superior...

mas sem um layout vai complicar pra vc colocar outros componentes na janela!

import javax.swing.*;

public class Janela extends JFrame {

    public Janela() {
        super("Janela com JFrame");

        this.setVisible(true);

        this.setSize(600, 400);

        JPanel panel = new JPanel();

        panel.add(new JLabel("Como deixar esse texto no topo da janela"));

        this.add(panel);
    }

    public static void main(String[] args) {
        new Janela().setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
}
V

Suportar diferentes layout managers é um recurso da classe JFrame! Faço minhas as palavras do tkx, aprenda a usar os layouts.

Eventualmente você vai ouvir falar do setBounds e setLayout(null). Fuja disso! Apesar de deixar vc dar a posição exata de cada componente, não vai deixar seu usuário redimensionar as janelas e nem será multiplataforma. Aprenda os layout managers, dá um pouquinho mais de trabalho, mas o resultado mais do que compensa. :smiley:

P

Olá pessoal,

ai está o mesmo código utilizando o Gerenciador de Layout GridBagLayout, mas o texto ainda continua no meio da tela.

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

public class Janela extends JFrame {
	
	public Janela() {
		this.setTitle("Janela com JFrame");
		
		this.setVisible(true);
		
		this.setSize(600,400);
		
		JPanel painel = new JPanel();
		
		painel.setLayout(new GridBagLayout());
		
		GridBagConstraints cons = new GridBagConstraints();
		
		cons.gridx = 0; //Coluna
		cons.gridy = 0;	//Linha
		cons.gridwidth = 1;
		painel.add(new JLabel("Como deixar esse texto no topo da janela"), cons);

		this.add(painel);
		
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
	}

	public static void main ( String [] args ) {
		new Janela();
	}

}
T

Bom... o gridbag eu dei a dica pq é um dos mais poderosos, e dos menos triviais!

O exemplo q t dei com border layout resolveria! Mas tou mandando um exemplo com gridbag!

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

public class Janela extends JFrame {

    public Janela() {
        this.setTitle("Janela com JFrame");

        this.setVisible(true);

        this.setSize(600,400);

        JPanel painel = new JPanel();

        painel.setLayout(new GridBagLayout());

        GridBagConstraints cons = new GridBagConstraints();

        cons.gridx = 0; //Coluna
        cons.gridy = 0; //Linha
        cons.gridwidth = 1;
        cons.weighty = 0.05; //adicionado para ocupar 5% do espaço
        painel.add(new JLabel("Como deixar esse texto no topo da janela"), cons);

        cons.weighty = 0.95; //adicionado um panel vazio para ocupar 95% do espaço, completando 100%
        //Observar que está na linha 1 (gridy=1), e o anterior na linha 0 (gridy=0)
        cons.gridy = 1;
        painel.add(new JPanel(),cons);

        this.add(painel);

        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    }

    public static void main ( String [] args ) {
        new Janela();
    }

}
P

Valeu Tkx, muito obrigado por tirar minha dúvida.

T

Disponha! Não se esqueça de editar o título do tópico e colocar [RESOLVIDO]

Mais dúvidas não hesite em perguntar!

Criado 16 de março de 2010
Ultima resposta 20 de mar. de 2010
Respostas 9
Participantes 3