Como faço pra redimensionar o JTable em tempo de execução . Gostaria que o JTable da minha interface ficasse no tamanho ideal pra conter todas as colunas e linhas de dados que tem e não que ele ocupasse todo o painel .
Vc na verdade quer redimencionar a janela acredito…
use no lugar de setSize()
o metodo pack() da sua JFrame.
apos ele se quiser centralizar a janela na tela use setLocationRelativeTo(null)
C
ccefetpb
Obg pela resposta …
Bem na verdade não , pensando bem talvez , o que eu preciso redimensionar e o painel que contem a tabela pra ficar do tamanho ideal .
Não sei se vcs vão entender.
Esse não e o projeto que estou fazendo mas serve de exemplo.
A tabela ta ocupando um espaço no painel que não deveria queria que o painel ficasse do tamanho da tabela.
D
dyorgio
complicado amigo, esta dificil de entender o que vc deseja…
senti falta de um JScrollPane ai na tua tabela, sera que nnao é isso que vc quer?
L
lina
Esse não e o projeto que estou fazendo mas serve de exemplo.
A tabela ta ocupando um espaço no painel que não deveria queria que o painel ficasse do tamanho da tabela.
Oi,
Como você está utilizando Layout no frame principal a sua JTable está ocupando o painel inteiro.
Então, o que você quer?
Tchauzin!
C
ccefetpb
Realmente sei que é dificil visualizar o que estou falando , na verdade acho que nem eu entendo direito o que quero.
De novo : esse JTable tem um tamanho x, o painel onde ele esta contido é maior que ele ( o frame é irrelevante ) - no netbeans isso pode ser visualizado melhor a tabela é maior do que o espaço que suas celulas ocupam .
O que eu quero é uma maneira de descobrir qual o tamanho da tabela e redimensiona-la nesse tamanho.
o seu problema é o que a Lina falou…
o seu layout esta esticando a tabela para o conteudo do seu painel…
na verdade vc esta trabalhando com a JTable de maneira incorreta…
na hora que for adicionar o JTable no painel
faça isso:
seuPainel.add(new JScrolPanel(suaTabela));
C
ccefetpb
Consegui add a foto…
Bem 6 tão vendo que a tabela é maior que o painel tanto que as margens da tabela tão aparecendo.Quero que essas linhas sumam.
L
lina
dyorgio:
assim por cima eu sugeriria o seguinte HACK:
// apos carregar os dados da tabelaseuPainel.setPreferredSize(suaTabela.getPreferredSize().getWidth(),seuPainel.getPreferredSize().getHeight());// ouseuPainel.setPreferredSize(suaTabela.getPreferredSize());
Oi,
Se não estou enganada, o método setPreferredSize() só aceita um parâmetro em sua assinatura.. Logo, a solução de número 1 pode ser descartada.
A solução de número 2 podemos considera-la, porém como ele está utilizando um BorderLayout acredito não surtir efeito..
Tchauzin!
L
lina
dyorgio:
entendi o que vc quer…
o seu problema é o que a Lina falou…
o seu layout esta esticando a tabela para o conteudo do seu painel…
na verdade vc esta trabalhando com a JTable de maneira incorreta…
na hora que for adicionar o JTable no painel
faça isso:
seuPainel.add(new JScrolPanel(suaTabela));
Oi,
Realmente essa seria a melhor opção…
Tchauzin!
D
dyorgio
Lina, não uso o eclipse para codificar no forum,
por isso erros são normais,
espero no minimo que um programador Java encaixe a dica que dei numa assinatura compativel,
no caso usar um new Dimension(w,h) como parte da solução, pois não sou obrigado a decorar assinatura de todos os metodos,
apenas os conceitos…
e realmente, a solução ñ funcionaria para o que ele deseja, pois o que ele quer ja esta errado desde o começo
o correto quando se trabalha com listas e tabelas é usar o JScrolPane entre o painel e a tabela/lista…
qualquer coisa fora disso fica uma interface com problemas.
L
lina
dyorgio:
Lina, não uso o eclipse para codificar no forum,
por isso erros são normais,
espero no minimo que um programador Java encaixe a dica que dei numa assinatura compativel,
no caso usar um new Dimension(w,h) como parte da solução, pois não sou obrigado a decorar assinatura de todos os metodos,
apenas os conceitos…
Oi,
A minha intenção não foi apontar um erro seu e sim demonstrar que a solução não era adequada para o problema exposto.
Também não compilei o código, porém sei que aquilo não funcionaria neste caso de Layout.
Bom… o que você falou está correto, “o correto quando se trabalha com listas e tabelas é usar o JScrolPane entre o painel e a tabela/lista…”
Tchauzin!
C
ccefetpb
Estou chegando perto da solução , mas ainda não esta ideal - so pra constar no painel da foto eu uso scrolpane , o outro codigo foi so como exemplo.
O codigo real ta assim por enquanto :
DefaultTableModel defaultTableModel = new DefaultTableModel(tableString , titulos);
JTable table = new JTable(defaultTableModel);
JScrollPane jScrollPane = new JScrollPane(table);
jScrollPane.setPreferredSize(table.getPreferredSize());
table.setEnabled(false);
panel.add(jScrollPane);
mas como e possivel ver na foto na tabela apareceu um scroll lateral , mas existe espaço mais que suficiente no painel pra todas as linhas sem o scroll.Novamente grato pela ajuda.
D
dyorgio
Estou tentando lhe dizer que não esta ficando uma boa interface grafica cara…
acredito que vc soh esteje querendo treinar swing correto?
não vá para esse lado, interface estranha :S
o scrol lateral pode ser desabilitado, consulte o javadoc do JScrollPane.
quando se trabalha com layouts é importante não trabalhar com tamanho fixo dos componentes…
o uso sorreto ai seria
seuPainel.add(new JScrolPane(suaTabela));
e pronto.
o scrollpane ocupando todo o painel e a tabela apenas o que necessita dentro do scrolpane.
isso é o padrão de interface.
C
ccefetpb
o - , sim eu não sou experiente em Swing e sim estou fazendo pra aprender.
Mas estou ajeitando o layout a medida que desenvolvo.
Estou engatinhando ainda e bem … né pra isso que serve o forum pra tirar duvidas e duvidas eu tnho muitas.
=P
Tbm achei feio - vc q viu o outro post viu como os textfields tão deslinhados .
Obg a tds pela ajuda , assim que conseguir deixar como quero posto a solução.
C
ccefetpb
Mesmo assim eu gostaria de saber que metodo desablita a barra lateral , dei uma olhada na api e encontrei esse metodo :
Que desabilito a barra lateral como eu queria mas tbm me impediu de enchergar os elementos que ultrapassavam a tabela .
Não existe uma maneira de descobrir qual a altura da tabela ?
M
marcobiscaro2112
Não está diretamente relacionado à sua dúvida, mas é importante dizer: não faça aquela POG para preencher sua tabela. Em outras palavras: [color=red]fuja de DefaultTableModel[/color]!
Além disso, caso você queira criar componentes mais complexos, é mais que obrigatório criar seu próprio TableModel. Um exemplo é o JTreeTable, que pode ser conferido aqui: http://java.sun.com/products/jfc/tsc/articles/treetable1/
P
pedroroxd
Com esse tanto de link fica ateh dificil escolher qual que agente usa…
Na verdade o primeiro e o último links são implementações mais completas e poderosas (portanto, mais complexas), que costumam resolver qualquer parada. Já os links do meio são exemplos práticos de como você pode implementar seu próprio TableModel.
P
pedroroxd
Hehe…
Eu, que faço aplicações soh para mim msmo, estou usando a terceira, que é bem básica, fácil, e ainda sim melhor que o default table model, e estou satisfeito!
B
Brucelee
Pessoal, eu estou usando o modelo de um de vocês e não tem como eu recuperar a linha selecionada!
Quer dizer, ele não tem o método tabela.getSelectedRow() !
Como eu faço?
Obrigado,
Bruno
P
pedroroxd
Brucelee:
Pessoal, eu estou usando o modelo de um de vocês e não tem como eu recuperar a linha selecionada!
Quer dizer, ele não tem o método tabela.getSelectedRow() !
Como eu faço?
Obrigado,
Bruno
O que exatamente você está querendo fazer?
Qual modelo você está usando?
E estou querendo que quando o usuário selecione uma linha e clique no botão Remover, aquela linha seja removida… Mas não tem como pegar o index da linha…
AbstractTableModel não possui mais o método getSelectedRow(). Como eu faço agora?
M
Marky.Vasconcelos
Ué, cria esse método na sua implementação.
E voce vai guardar a referencia para sua implementação e não para o AbstractTableModel então voce sempre tera esse metodo a sua disposição.
L
leogazio
Olá marcobiscaro2112!
Cara então, eu venho do Delphi, onde temos os Datasets, quero muito trocar o delphi pelo swing mas tenho visto que pra se popular um jTable(equivalente dos TDBgrids do delphi) escreve-se uma imensidão de código, imagina um sistema desse inteiro na hora da manutenção. Será que não tem uma forma menos complexa de se trabalhar com banco de dados no swing, tipo escrevendo menos como nos datasets do delphi?
[]'s.
V
ViniGodoy
Eu também vim do Delphi e me assustei a primeira vez. Mas acredite, mesmo com aquele monte de código, é muito mais simples trabalhar com Java.
De qualquer forma, você pode escrever muito menos código usando o ObjectTableModel, que está na minha assinatura, do marco e do Mark (autor do projeto).
L
leogazio
Olá Vinigodoy, obrigado pela resposta… Pois é cara, eu no delphi fico meio amarrado, agora eu me deparei com a necessidade de escrever um sistema pra uma empresa onde tem um monte de máquina com linux também, e nunca gostei nem me interessei em usar o Kylix. Posso adicionar você no msn?
[]'s.
L
Lintz_net
Eu também vim do Delphi e me assustei a primeira vez. Mas acredite, mesmo com aquele monte de código, é muito mais simples trabalhar com Java.
De qualquer forma, você pode escrever muito menos código usando o ObjectTableModel, que está na minha assinatura, do marco e do Mark (autor do projeto).
Olá Vini, tudo bem?
Queria uma orientação sua pq estou construindo um TabelModel e fiquei com dúvida de como implementar um JTabel q tenha uma linha com totalizador( tipo uma função agregada como sum do excel, entendeu?). Por exemplo:
|cod. Item | Valor|
----------------------|
|00000001|0050 |
----------------------|
|00000002|0150 |
----------------------|
|00000003|0250 |
----------------------|
|TOTAL | 500 | (esta é a linha que quero adicionar)
E a minha dúvida é em relação a exibição desta linha no objeto JTable e a não inclusão de um objeto de negocio na minha lista q está no model). A implementação do meu TableModel segue mais ou menos a ideia do Mark. tem alguma ideia de como faço isso?