Porque não entra no if? 'setar' tamanho da coluna do JTable

public void setTamanhoDasColunas(int...i) { int j=0; for(int a: i) { this.tamanhoDasColunas.add(j, a); j++; } TableColumn coluna = null; //Não entra nesse if: if(i.length == this.tamanhoDasColunas.size()) { j=0; for(int a: i) { for(int x=0; x < tabela.getModel().getColumnCount(); x++) { coluna = tabela.getColumnModel().getColumn(x); coluna.setPreferredWidth(this.tamanhoDasColunas.get(x)); } } this.modelo.atualizaColunas(); } }

this.modelo.atualizaColunas(); == modeloDaTabela.fireTableStructureChanged();

depois editei o if para if(true) entao ele muda, mas deixa todas as colunas com a mesma largura…

entendo que não precisava do if…ja tirei…mas mesmo assim ele devia entrar, n devia??

agora mesmo sem o if ele altera o tamanho mas todos ficam iguais, e não igual eu coloquei

Quando passo para o construtor, na hora de construir a JTable dai funciona…o jeito é remover a tabela e criar uma nova?? pq não altera o tamanho corretamente?

Resumindo: o novo método está assim:

public void setTamanhoDasColunas(int...i) { TableColumn coluna = null; for(int a: i) { for(int x=0; x < tabela.getModel().getColumnCount(); x++) { coluna = tabela.getColumnModel().getColumn(x); coluna.setPreferredWidth(a); } } this.modelo.atualizaColunas(); }

Ele até funciona mas deixa todas as colunas do mesmo tamanho

fredcrs, observando o seu código vc está passando o tamanho das colunas no i, e está fazendo um for para settar todas as colunas com o mesmo tamanho.
não sei se é o seu objetivo mais tenta passa o numero da coluna e o tamanho que quer.

certo…verdade…agora corrigi, mas continua todas do mesmo tamanho… n era pra tar certo?

public void setTamanhoDasColunas(int...i) { TableColumn coluna = null; int x = 0; for(int numero: i) { coluna = tabela.getColumnModel().getColumn(x); coluna.setPreferredWidth(numero); x++; } this.modelo.atualizaColunas(); }

tbm ficou tudo do mesmo tamanho…dai fiz invez de x ali no getColumn coloquei x+1 e dai funcionou, mas deu IndexoutofBouds Exception (lógico)

Cara acho que vc vai ter que settar o tamanho de cada coluna uma por uma,
no seu código eu só não consegui entende em que vc está basendo o tamanho das colunas já que todas vão ser do tamanho de x, e x vai aumentando de 1 em 1, seria quase que imperceptível a mudança nos tamanhos das colunas. o que pode fazer é um for por todas as colunas da tabela. Pegar o título das colunas e basear o tamanho nelas

//não sei ao certo se é getColumnCount()
for (int i = 0; i<=tabela.getColumnCount(); i++) {
coluna = tabela.getColumnModel().getColumn(i);  
//aqui ele pega o título da coluna e multiplica por 3(altere para o numero que ficar melhor a disposição das colunas), para definir o tamanho.
coluna.setPreferredWidth(coluna.getText().length()*3);
}

veja se funciona e me diga.

Sim, entendi seu codigo que tbm está certo.
Vou tentar ao chegar em casa…
Mas o que eu queria fazer nesse caso é passar para o método os tamanhos das colunas respectivamente.
setTamanhoDasColunas(20, 300, 10, 50);

ele ta pegando a primeira coluna, o primeiro numero do for que roda o i ( que é um argumento de n ints)
seta o tamanho da coluna x(que começa no zero), depois pega o proximo argumento do método, que seria o 300, e seta a coluna x+1, e assim vai…
Depois dispara fireTableStructureChanged();

EDIT:
chegando em casa vou tentar fazer o for pelas colunas invez de pelos argumentos do método…pode ser isso…

public void setTamanhoDasColunas(int...i) { TableColumn coluna = null; int x=0; for(int j=0; j < tabela.getColumnModel().getColumnCount(); j++) { coluna = tabela.getColumnModel().getColumn(j); coluna.setPreferredWidth(i[x]); x++; } this.modelo.atualizaColunas(); }

Tentei fazer assim agora, mas tbm nao funciona…sera q tem q fazer uma nova tabela para funcionar?? E não deve dar pra mudar o tamanho das colunas depois de prontas?
Pois o código é o mesmo do construtor…e aqui não funciona…ele deixa todas do mesmo tamanho

Até assim ela fica na mesma, todas iguais…

public void setTamanhoDasColunas(int...i) { TableColumn coluna = null; for(int j=0; j < tabela.getColumnModel().getColumnCount(); j++) { coluna = tabela.getColumnModel().getColumn(j); coluna.setPreferredWidth(j*20); } this.modelo.atualizaColunas(); }

N sei pq da certo se comeco alterando da segunda coluna! getColumn(1);
da certo mas dps da IndexOutOfBounds Exception (logicamente)

Vc disse que elas ficam do mesmo tamanho, mais o tamanho chega mudar comparado a antes de chamar o método?
Qualquer coisa tente criar uma nova jTable e dar um setmodel

Po cara, valeu pela forca…mas realmente não deu…fiz uma outra tabela, um novo table model …tentei remover do scroll e adicionar a nova tabela e nao deu…
depois removi o scroll da InternalFrame e tbm nao deu

o engracado é que ate muda o tamanho das colunas mas sempre ficam todos do mesmo tamanho.

valeu pela ajuda…vou desistir por enquanto disso

É que na verdade o pouco que eu sei de java é SWT e não swing, dai eu fico meio que perdido, ele são um pouco diferentes, no swt o que eu iria fazer, pegar todas das colunas da tabela, iterar e ir alterando o tamanho com o setwidth. no swt o método ficaria assim:

// os minha classe são para swt non swing.
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
//settando o tamanho nas colunas inicial
public void alteraTamanho(int tamanhoColunas) {
                //TableColumn é as colunas do objeto Table
		for (TableColumn tc : tbTeste.getColumns()) {
			tc.setWidth(tamanhoColunas);
                        tamanhoColunas +=20;
		}
	}

veja se consegue alterar para swing.

cara vou tentar…obrigado