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á.
D
DarkLouis
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
D
DarkLouis
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.
erico_kl
Mas esse problema acontece em todos os JFrames? Senão, poste somente a classe em que o problema ocorre…
D
DarkLouis
beleza,
Segue em anexo a classe
erico_kl
Você poderia ter postado ela direto, com as tags "code":
packageView;importjava.awt.BorderLayout;importjava.awt.Container;importjava.awt.Dimension;importjava.awt.Image;importjava.awt.Toolkit;importjava.util.ArrayList;importjava.util.LinkedList;importjavax.print.DocFlavor.URL;importjavax.swing.ImageIcon;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JPanel;importjavax.swing.JScrollPane;importjavax.swing.JTable;importjavax.swing.JToolBar;importjavax.swing.border.TitledBorder;importModel.Tabela;publicclassInterfaceextendsJFrame{privateJToolBartoolbar=newJToolBar();privateTabelaGraficaminhaTabela=newTabelaGrafica();publicJToolBargetToolbar(){returntoolbar;}publicvoidsetToolbar(JToolBartoolbar){this.toolbar=toolbar;}publicTabelaGraficagetMinhaTabela(){returnminhaTabela;}publicvoidsetMinhaTabela(TabelaGraficaminhaTabela){this.minhaTabela=minhaTabela;}publicInterface(){super("Interface Grafica!");}publicvoidcriaInterface(){Containerpane=this.getContentPane();pane.setLayout(newBorderLayout());// adiciona o toolbar no topopane.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 botoesBotoesbotoes=newBotoes();ArrayList<JButton>meusBotoes=botoes.listaDeBotoes();for(inti=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.URLurl=this.getClass().getResource("Icones/bd.png");ImageimagemTitulo=Toolkit.getDefaultToolkit().getImage(url);this.setIconImage(imagemTitulo);//cria um objeto de tabela grafica para trabalhar com a JTableJPanelpnTable=criaPainel(null);pane.add(BorderLayout.SOUTH,pnTable);repaint();}publicJPanelcriaPainel(TabelatabelaNegocio){Botoesbotoes=newBotoes();//ExemploTabelatabelaAux=newTabela("Exemplo");LinkedList<String>teste=newLinkedList<String>();LinkedList<String>aux=newLinkedList<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=newLinkedList<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=newLinkedList<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=newLinkedList<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);//fimExemploJTabletabela=minhaTabela.criarTabelaGrafica(tabelaAux);JPanelpnTable=newJPanel();JScrollPanescrollTable;scrollTable=newJScrollPane();scrollTable.setViewportView(tabela);scrollTable.setEnabled(false);scrollTable.setVisible(true);scrollTable.setPreferredSize(newDimension(750,550));pnTable.add(botoes.botaoADD());pnTable.add(botoes.botaoDelete());pnTable.setBorder(newTitledBorder("Trabalho de OO Avancada!"));pnTable.setBounds(20,20,370,230);pnTable.add(BorderLayout.SOUTH,scrollTable);pnTable.setVisible(true);returnpnTable;}}
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
D
DarkLouis
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
ViniGodoy
Mova o setVisible para a ultima linha do criaInterface…
D
DarkLouis
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
ViniGodoy
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.
D
DarkLouis
É 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!