[Resolvido] Problema com JTable - como dar repaint?

Olá a todos,

Tenho um JScrollPane com um JTable dentro e estou tentando coloca-lo em um JFrame. Mas isso não ocorre na inicialização do programa, e sim a pedido do usuário.
O problema é que ao colocar o scrollpane no frame não é mostrada a tabela. Apenas depois de minimizar (ou algumas outras operações) é que a tabela é mostrada.
Imagino que isso signifique que o frame não foi redesenhado após adição do scrollpane.

O código a seguir replica o comportamento:

[code]import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;

public class Teste extends JFrame{
JPanel painel;

public Teste() {		
	painel = new JPanel(new BorderLayout());
	
	JButton botao = new JButton("Criar tabela");
	botao.addActionListener(new ActionListener() {
		public void actionPerformed(ActionEvent arg0) {
			preencher();
		}
	});
	
	painel.add(botao, BorderLayout.NORTH);

	this.setContentPane(painel);		
	this.setSize(300, 300);
	this.setVisible(true);
	this.setDefaultCloseOperation(EXIT_ON_CLOSE);	
}

public void preencher() {
	String[] colunas = {"A", "B"};  
	Integer[][] linhas = {{0, 0}, {1, 10}, {2, 20}, {3, 30}};  
	
	JTable table = new JTable(linhas, colunas);
	table.setFillsViewportHeight(true);
	JScrollPane scrollPane = new JScrollPane(table); 
	
	painel.add(scrollPane, BorderLayout.CENTER);
}

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

}[/code]

Já tentei usar o repaint(), mas não sei para que componentes devo enviar a mensagem de repaint.

Alguém saberia como resolver isso?

Grato pela atenção

Crie a tabela e o scroll pane fora do método preencher (apenas uma instância de cada). O seu método preencher deve mexer só com os dados da tabela (através do TableModel).

O código serve apenas para replicar o que ocorre.

De qualquer forma acabei encontrando a solução por acaso.

[code]

JTable table = new JTable(linhas, colunas);
table.setFillsViewportHeight(true);
JScrollPane scrollPane = new JScrollPane(table);

	painel.add(scrollPane, BorderLayout.CENTER);
	this.validate();

…[/code]

Grato pela atenção.

Ainda acho que você não deveria ficar (re)criando os componentes a cada chamada do método… Enfim, se resolveu, tudo bem.
[]´s

[quote=manwe]O código serve apenas para replicar o que ocorre.

De qualquer forma acabei encontrando a solução por acaso.
[/quote]

Na verdade, era mais fácil ler a documentação:

@davidbuzatto Como disse, o código era apenas para mostrar o problema. O programa real não recria os componentes a cada chamada, era simplesmente um exemplo. Mas obrigado pela dica de qualquer forma.

@ViniGodoy OK,essa nota da documentação passou despercebida. Obrigado pela informação.