Erro com o JSwing e JTable

Boa tarde;

Eu estou com um erro meio estranho na minha janela grafica.Tipo eu começo executando a aplicação, e ele não mostra a JTable que eu criei.

Mas quando eu dou uma ajeitada manual no tamanho da janela, seja pra mais ou pra menos, ele então começa a exibir.E apartir daquele momento que começou a exibir ele continua exibindo corretamente.

Porem porque ele não começa exibindo logo que eu começo o programa? Já aconteceu isso com alguem aqui?

Coloquei algumas fotos em anexo pra entenderem melhor.




Se o setVisible da sua janela estiver dentro do seu construtor, tire ele de lá.

Não, na verdade eu não implementei nenhum construtor

O setVisible de todos os meus componentes eu estou setando como true, fora de construtores.

Na verdade essa minha JTable esta dentro de um JScrollPane.

Mas o estranho é que TODOS tão setados como true.Conversei com um pessoal mais experiente da faculdade, eles nunca viram esse negócio de ter que muda o tamanho da janela (pra mais ou PRA MENOS) para ter que aparecer um componente.

O que acontece é as vezes sua janela ta muito pequena e não mostra o componente, dai voce tem que aumentar ela um pouco manualmente.


Isso parece ser um problema de repaint…
Isso que vou falar é gambiarra mas tente chamar um repaint() após a criação do seu frame… Mas de qualquer forma mesmo se der certo, poste o seu código

Vish o projeto é grande, e tem um monte de coisa encapsulada.

De qualquer jeito se quiser dar uma olhada…

O que é importante ta só na view, o resto é exceção e Model.

Mas esse problema acontece em todos os JFrames? Senão, poste somente a classe em que o problema ocorre…

beleza,

Segue em anexo a classe

Você poderia ter postado ela direto, com as tags “code”:

[code]package View;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Image;
import java.awt.Toolkit;
import java.util.ArrayList;
import java.util.LinkedList;

import javax.print.DocFlavor.URL;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JToolBar;
import javax.swing.border.TitledBorder;

import Model.Tabela;

public class Interface extends JFrame{

private JToolBar toolbar = new JToolBar();
private TabelaGrafica minhaTabela = new TabelaGrafica();

public JToolBar getToolbar() {
	return toolbar;
}

public void setToolbar(JToolBar toolbar) {
	this.toolbar = toolbar;
}

public TabelaGrafica getMinhaTabela() {
	return minhaTabela;
}

public void setMinhaTabela(TabelaGrafica minhaTabela) {
	this.minhaTabela = minhaTabela;
}

public Interface(){
	super("Interface Grafica!");
}

public void criaInterface(){
   
   Container pane = this.getContentPane();
   pane.setLayout(new BorderLayout());
   
   // adiciona o toolbar no topo
   pane.add(BorderLayout.NORTH, toolbar);
   this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   this.setSize(850,700);
   this.setVisible(true);
   
   
   //chama o metodo da classe Botoes responsavel por gerar os botoes
   Botoes botoes = new Botoes();
   ArrayList<JButton> meusBotoes = botoes.listaDeBotoes();
   for(int i = 0; i < meusBotoes.size();i++){
		toolbar.add(meusBotoes.get(i));
	}

	
	//defini o novo icone do programa.No caso, o icone nao será mais a xicara da Sun
	//ImageIcon imagemTituloJanela = new ImageIcon("C//Users/Wilner/workspace/Trabalho I - OO avancada/bin/View/IconesIcones/bd.png");
	java.net.URL url = this.getClass().getResource("Icones/bd.png");  
	Image imagemTitulo = Toolkit.getDefaultToolkit().getImage(url);  
	this.setIconImage(imagemTitulo);
	
	//cria um objeto de tabela grafica para trabalhar com a JTable
	JPanel pnTable = criaPainel (null);
	pane.add(BorderLayout.SOUTH,pnTable);
	repaint();
	
}


public JPanel criaPainel (Tabela tabelaNegocio) {
	
	 Botoes botoes = new Botoes();
	 
	 //Exemplo
	 
	 Tabela tabelaAux = new Tabela("Exemplo");
	 
	 LinkedList<String> teste =  new LinkedList<String>();
	 LinkedList<String> aux =  new LinkedList<String>(); 
	 teste.add("Nome");
	 teste.add("Telefone");
	 teste.add("Faculdade");
	 teste.add("Sexo");
	 teste.add("EU");
	 teste.add("EU");
	 teste.add("EU");
	 tabelaAux.insereNovaLinha(teste);	 
	 aux.add("Luis");
	 aux.add("54623223");
	 aux.add("UCS");
	 aux.add("M");
	 aux.add("M");
	 aux.add("M");
	 aux.add("M");
	 tabelaAux.insereNovaLinha(aux);
	 
	 LinkedList<Boolean> flag =  new LinkedList<Boolean>();
	 flag.add(false);
	 flag.add(true);
	 flag.add(false);
	 flag.add(false);
	 flag.add(false);
	 flag.add(false);
	 flag.add(false);
	 tabelaAux.setNullChecker(flag);
	 
	 LinkedList<Boolean> bla =  new LinkedList<Boolean>();
	 bla.add(true);
	 bla.add(false);
	 bla.add(false);
	 bla.add(false);
	 bla.add(false);
	 bla.add(false);
	 bla.add(false);
	 tabelaAux.setPrimaryKey(bla);
	 
	 LinkedList<Integer> hey =  new LinkedList<Integer>();
	 hey.add(2);
	 hey.add(2);
	 hey.add(2);
	 hey.add(3);
	 hey.add(3);
	 hey.add(3);
	 hey.add(3);
	 tabelaAux.setTipo(hey);

	 
	 //fimExemplo
	
	 JTable tabela = minhaTabela.criarTabelaGrafica(tabelaAux);
	 JPanel pnTable = new JPanel();
	 
	 
	 JScrollPane scrollTable;
	 scrollTable = new JScrollPane();
	 scrollTable.setViewportView(tabela);
	 scrollTable.setEnabled(false);
	 scrollTable.setVisible(true);
	 scrollTable.setPreferredSize(new Dimension(750,550));
	 
	 pnTable.add(botoes.botaoADD());
	 pnTable.add(botoes.botaoDelete()); 
	 pnTable.setBorder(new TitledBorder("Trabalho de OO Avancada!"));
	 pnTable.setBounds(20, 20, 370, 230);
	 pnTable.add(BorderLayout.SOUTH,scrollTable);
	 pnTable.setVisible(true);
	 
	 
	 return pnTable;
}

}[/code]
Veja que, ao contrário do que você disse, você está implementando o construtor padrão somente referenciando a classe pai (JFrame)… Olhe a linha 44.
Talvez esteja fantando chamar o método criaInterface() nele

assim:

public Interface(){
		super("Interface Grafica!");
		criaInterface();
	}

Vixi mesmo assim não funfou.

O estranho é que os botões sempre ficam visiveis, logo de cara.Só a JTable que eu adicionei na Pane(atraves de um JScrollPane) é que não aparece.Por isso acho que o problema não esteja na interface em si, e sim na JScrollPane ou na propia JTable talvez

Mova o setVisible para a ultima linha do criaInterface…

VIxi Vini,

Você deve entender só um pouquinho de Java hein…

Funcinou cara, muito obrigado!

OBS: Mostrei pra meio mundo na faculdade ninguem soube hehe

Detalhe que eu já estava cantando a bola do setVisible desde o primeiro post.
Você não deve deixar a janela visivel enquanto a está construindo, seja no construtor ou num outro método, como você fez.

É a minha primeira aplicação gráfica em java, voce tinha falado e eu nao tinha entendido, dei mole mesmo…
de qualquer forma obrigado de novo!

abrass