Text não exibe no Frame

Oi, o texto não exibe no frame.
Veja:

//Tam.java


import javax.swing.JFrame;
import javax.swing.JLabel;
import java.awt.Font;
public class Tam  extends JFrame {
	
	private JLabel displayText;
	
	public Tam()
	{
		displayText = new JLabel("Tam");
		JFrame set = new JFrame();
		displayText.setFont(new Font ("Serif", Font.PLAIN,72));
		add(displayText);
		set.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		set.setSize(400, 250);
		set.setTitle("Título");
		set.setVisible(true);

		
		
	}

}

hmm… acho q é por causa do layout … tenta colocar um flowlayout

Adcionei ao Frame.Mas, não aparece.

Adcionei ao Frame.Mas, não aparece.

seta um layout pro seu JFrame… usa isso

set.setLayout(new FlowLayout());

Feito, mas ainda assim, não aparece o texto. A propósito, para que setar layout para o JFrame ?

v se resolve

para ele posicionar automaticamente sua label … caso fosse esse o motivo dela nao aparecer no frame

e ai hackum, blz cara?

faz o seguinte, substitua a linha 16 por essa ai

set.add(displayText);

Assim vc faz com que o JLabel seja adicionado ao frame q vc chamou de set.

Problema resolvido, basta adcionar ao frame dessa maneira:

set.add(displayText);

Mas, continuando sobre o Flow Layout ? É o mesmo que Border Layout ?

Os dois são gerenciadores de layout. Beeem resumidamente é o seguinte.

FlowLayout é um gerenciador que adiciona os componentes ao container usando a disposição de linhas. Aplicações frequentes deste gerenciador é quando queremos exibir uma fileira de botões na interface da aplicação.

BorderLayout divide um container em cinco regiões: centro (CENTER), norte (NORTH), sul (SOUTH), leste (EAST) e oeste (WEST).

Veja, você mesmo criou a confusão.

a) Você declarou uma classe, que estende JFrame;
b) No construtor dessa classe, você criou um objeto, do tipo JFrame.
c) Você exibe o objeto criado, mas usa o add na sua própria classe.
d) Seu construtor acaba não fazendo coisa nenhuma na sua própria classe.

Elimine a confusão removendo o passo b). A forma que você corrigiu está certa, mas ainda gera um código confuso (se você vai criar um JFrame direto, para que estender JFrame?)

O código corrigido fica assim:

[code]
import javax.swing.JFrame;
import javax.swing.JLabel;
import java.awt.Font;

public class Tam extends JFrame {

private JLabel displayText;

public Tam() {
	displayText = new JLabel("Tam");		
	displayText.setFont(new Font("Serif", Font.PLAIN, 72));

	//Adicionamos tudo no frame que estamos construindo	
	add(displayText, BorderLayout.CENTER);
	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	setSize(400, 250);
	setTitle("Título");		
}

public static void main(String[] args) {
	//Abrimos a janela da classe Tam, que acabamos de criar
	new Tam().setVisible(true);
}

}[/code]

Note que também eliminei a chamada a setVisible(true) do seu construtor. É considerado péssima prática em programação Swing chamar setVisible no construtor, pois você está tornando visível uma janela que ainda não foi completamente construída (a construção de um objeto só termina quando o construtor termina. E isso nem sempre é na última linha do construtor, pois pode existir classes filhas).

Os layout managers definem como os componentes de sua tela ficarão posicionados. Se você não definir nenhum, o JFrame estará por padrão em BorderLayout. Para entender como cada layout manager funciona, dê uma olhada nesse guia visual:
http://download.oracle.com/javase/tutorial/uiswing/layout/visual.html

Layout managers são a forma correta, portável e multiplataforma de posicionar componentes. Com eles, você também pode fazer janelas redimensionáveis, pois você ajusta como cada componente deve se esticar e se locomover quando a janela mudar de tamanho.

Obrigado!