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…
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