[RESOOLVIDO] JTable não aparece

13 respostas
J

Olá pessoal do forum…
Eu tenho um JTable que eu queria colocar um JScroll. Meu código ficou assim:

table_2.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); JScrollPane scroll = new JScrollPane(table_2); scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); panel_3.add(scroll);

Mas nada aparece :shock:
Quando não tinha o scroll, aparecia normal, mas qdo eu tento coloca-lo nem aparece,
nem ele, nem a tabela.

Grato desde já

Jonh

13 Respostas

N

Poderia postar todo o código para análise?

E

jonhzihnhoOo:
Olá pessoal do forum…
Eu tenho um JTable que eu queria colocar um JScroll. Meu código ficou assim:

table_2.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); JScrollPane scroll = new JScrollPane(table_2); scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); panel_3.add(scroll);

Mas nada aparece :shock:
Quando não tinha o scroll, aparecia normal, mas qdo eu tento coloca-lo nem aparece,
nem ele, nem a tabela.

Grato desde já

Jonh

Tenta adicionar assim com seu scroll:

J

Eu colequei assim:

table_2.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); JScrollPane scroll = new JScrollPane(); scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); scroll.setViewportView(table_2);

Mas mesmo assim não funcionou :cry:
Algumas questões:
1 - Minha tabela implementa um AbstractTableModel, isso tem alguma coisa a ver???
2 - Meu panel, está dentro de um JTabbedPane (meu aplicativo tem três abas e em uma
delas está minha tabela), isso tb tem algo a ver??

Grato desde já

Jonh

N

jonhzihnhoOo:

Algumas questões:
1 - Minha tabela implementa um AbstractTableModel, isso tem alguma coisa a ver???
2 - Meu panel, está dentro de um JTabbedPane (meu aplicativo tem três abas e em uma
delas está minha tabela), isso tb tem algo a ver??

Grato desde já

Jonh

  1. Aparece o desenho da sua tabela, mas sem os dados? Por exemplo, aparece o quadrado, aquele espaço onde fica a tabela, mas não aparecem os dados. É isso?
  2. Não, não tem nada a ver.
J

Não aparece nada, só o backgroud msm… Como se nada existisse ali…
Vou postar as imagens

Grato desde já.

Jonh




N

Tenta assim:

SeuAbstractTableModel model = new SeuAbstractTableModel();
JTable table = new JTable(model);
JScrollPane scroll = new JScrollPane(table);
panel.add(scroll);

2 coisas:

  1. Não gostei daquele auto_rezise_off não. Porque usou aquilo?
  2. Títulos você define na própria tabela. Eu vi que você colocou vários labels para representar os títulos. Ao invés disso, no seu TableModel, sobrescreva o método getColumnName, e passe os títulos para ela.

Testa aí, e dê o reply!

J

Não funcionou não amigo :cry:
Vou postar as classes, elas tão todas comentadas…
Obs.: nunca consegui colocar os títulos nas colunas =/

N
  1. Você tirou o Layout do panel3, mas não definiu um tamanho para ele. Defina um tamanho maior que o da JTable.
  2. Ao invés de dar setBounds na JTable, dê no JScrollPane.
  3. Para setar o título através do TableModel:
@Override
public String getColumnName(int column)
{
   if (column == colunaNome) return "Nome do Usuário";
   if (column == colunaSenha) return "Senha";
   // E por  vai...
   return "";
}
  1. Não seria melhor fazer o TableModel para trabalhar com objetos específicos?

Testa aí, e nos dê o reply!
Ainda vamos solucionar isso! :smiley:

J

Nicolas Fernandes vc vai pro céu \o/\o/\o/
Funcionou legal ficou assim:

panel_3.setLayout(new BorderLayout()); table_2 = new JTable(carregarListaDeRegistros()); table_2.setFont(new Font("Calibri", Font.PLAIN, 15)); JScrollPane scroll = new JScrollPane(table_2); scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS); scroll.setBounds(10, 37, 864, 349); panel_3.add("Center",scroll);

Ou seja, coloquei um BorderLayout no panel_3 e apliquei o setBounds() que era da
tabela nele. Fiquei legalzaum. Também sobrescrevi o método

pra renomear as colunas. Funcionou perfeitamente!!!
Sobre criar um model de Objeto, eu já tenho um exemplo, mas falta eu parar e estuda-lo
mais a fundo. Ele eu vou aplicar na versão 2.0 do programa, onde vou melhorar outras coisas
com por exemplo, o Hibernate na camada de persistencia (meu código tá com o PreparedStetament).

Só pra acabar, eu coloquei scrollPane no centro do layout, como eu faço pra colocar os outros botões
no sul do layout?? Eu tentei colocar mas só aparece o último tomando o espaço todo. Não tem como
ele ‘fluirem’ no Sul como no FlowLayout??

Brigado pela paciência

Jonh

N

jonhzihnhoOo:
Sobre criar um model de Objeto, eu já tenho um exemplo, mas falta eu parar e estuda-lo
mais a fundo. Ele eu vou aplicar na versão 2.0 do programa, onde vou melhorar outras coisas
com por exemplo, o Hibernate na camada de persistencia (meu código tá com o PreparedStetament).

Você não vai se arrepender em aprender a trabalhar com um TableModel voltado à objetos. Muito mais fácil e prático de usar a JTable!

jonhzihnhoOo:
Só pra acabar, eu coloquei scrollPane no centro do layout, como eu faço pra colocar os outros botões
no sul do layout?? Eu tentei colocar mas só aparece o último tomando o espaço todo. Não tem como
ele ‘fluirem’ no Sul como no FlowLayout??

Crie um JPanel para esses botões, e jogue esse novo JPanel no sul do painel principal. Por exemplo:

JPanel panelBotoes = new JPanel(new FlowLayout(FlowLayout.LEFT));
       panelBotoes.add( new JButton("Adicionar") );
       panelBotoes.add( new JButton("Alterar") );
       panelBotoes.add( new JButton("Remover") );

panelPrincipal.add( panelBotoes, BorderLayout.PAGE_END );

E voilà!

Testa aí e dá o reply!
Valeu, abraço!

J

Funcionou legal!!!
Eu não sei mto mexer no layout manualmente pq uso o WindowBuider, isso coloca me coloca
no hábito de “arrastar e soltar” pra montar a GUI.

Brigado por toda a paciencia.

Jonh

N

jonhzihnhoOo:
Funcionou legal!!!
Eu não sei mto mexer no layout manualmente pq uso o WindowBuider, isso coloca me coloca
no hábito de “arrastar e soltar” pra montar a GUI.

Começou errado, então!
Antes de começar a fazer interfaces no Drag’n’Drop, você deve aprender o caminho das pedras!
Aprenda a fazer na mão, primeiramente. Mesmo que seja mais trabalhoso, faça tudo na mão. Use uma ferramenta de criação de interfaces a partir do momento que você dominar a técnica de como fazer interfaces.
E, particularmente, prefiro fazer interfaces usando um MigLayout da vida. Muito prático, produtivo e deixa o teu código limpo e de fácil manutenção.

Pense no caso!

Abraço!

J

Seguirei o conselho e estudei mais o layout “na mão”.
Sobre o MigLayout, vou procurar saber sobre o assunto e quem sabe ele não entra na junto
com as outras melhorias.

Abraço

Jonh

Criado 6 de setembro de 2010
Ultima resposta 6 de set. de 2010
Respostas 13
Participantes 3