[color=blue]
Com uma ajudona consegui rodar o programa e as imagens aparecem no JFrame, porém as imagens tem 32x32, e essas dimensões não são preservadas. Quando estão na tabela elas alargam na horizontal e são cortadas na vertical. Ajudem-me a consertar isso.
[/color]
Quem controla o view da sua tabela é a classe JTable.
A divisão de tarefas é assim:
JTable -> Controla a view da tabela: ordenação de colunas, ordenação das linhas, highlight, tamanho da célula;
TableModel -> Diz que dados serão exibidos na tabela. Quantas linhas e que informação vai em cada coluna. Também pode sugerir o nome da coluna;
TableCellRenderer -> É o componente que o JTable usa para efetivamente desenhar a célula;
TableCellEditor -> É o componente que o JTable usa para editar a célula;
TableColumn -> Contém informações sobre uma coluna.
Então, vc deve procurar pela altura da linha no JTable e pela largura da coluna no TableColumn:
suaTable.setRowHeigth(32);for(inti=0; i < suaTable.getColumnCount(); i++)suaTable.getColumnModel().getColumn(i).setPreferredWidth(32);
Para que o cabeçalho da sua Table apareça, não esqueça de coloca-la num JScrollPane.
Sem isso, vc também não terá barras de rolagem.
J
JobaDiniz
[color=blue]
hum…a altura mudou, porém a largura não.
Meu JFrame tem 500x500 e tem como layout um BorderLayout; eu coloco a tabela no SOUTH, e ela acaba se ajustando à largura do frame (500), então se eu colocar na tabela duas imagens de 32x32, elas vão se expandir para chegar nos 500…tem como mudar isso?
[/color]
ViniGodoy
Ah, tem outro detalhezinho. Por padrão, a tabela redimensiona automaticamente as colunas.
Não deu certo.
Tenho o JFrame, vou dividi-lo em 3 partes; para isso setei o layout do JFrame sendo o BorderLayout (pq tenho NORTH, CENTER, SOUTH). Na parte SOUTH eu coloco a “MinhaTabela”.
Bom, só expliquei melhor, pq pode ser (não sei) o tipo de layout que estou usando…
|________________________________
|
|
|
|
|_________________________________
| A TABELA OCUPA TODO ESSE ESPAÇO
|_________________________________
Já pensou em baixar o Netbeans e usar o matisse do Netbeans? Aí vc só arrastaria e soltaria a tabela, além de usar o mouse para definir seu tamanho.
Outra alternativa seria colocar um JPanel com um GridLayout de 3 colunas na parte debaixo e deixar a tabela no meio.
Ou, se for para ajustar com mais cuidado o tamanho, use o GridBagLayout, mas cuidado, é complexo. Antes aprenda a usa-lo direitinho.
A
alexpassos
ViniGodoy
Seguindo seu conselho sobre o AbsTractTableModel. Estou com esse código que esta funcionando tranquilo.
public void fnCarregaGrid(String[] vCol, Vector rData) throws SQLException, ParseException {
//URL situacao = null;//URL editar = this.getClass().getResource("/sistema/imagens/table_edit24.png");//URL excluir = this.getClass().getResource("/sistema/imagens/table_delete24.png");//Defini as colunas//final String[] colunas = {"id", "Código", "Descrição"};finalString[]colunas=vCol;finalVectorrowDatas=newVector();rowDatas.addAll(rData);TableModeldataModel=newAbstractTableModel(){publicintgetColumnCount(){//return data[0].length;returncolunas.length;}publicintgetRowCount(){//return data.length;returnrowDatas.size();}publicObjectgetValueAt(introw,intcol){//return data[row][col];return((Vector)rowDatas.elementAt(row)).elementAt(col);}publicStringgetColumnName(intcolumn){//return "" + column;returncolunas[column];}publicClassgetColumnClass(intc){returngetValueAt(0,c).getClass();}publicbooleanisCellEditable(introw,intcol){//return col != 2; //Escolha a coluna que não vai ser editávelreturnfalse;//Bloquea todas as colunas}publicvoidsetValueAt(ObjectaValue,introw,intcolumn){//data[row][column] = aValue;((Vector)rowDatas.elementAt(row)).setElementAt(aValue,column);}};tabLista.setModel(dataModel);tabLista.setRowHeight(20);tabLista.getColumnModel().getColumn(0).setMinWidth(0);tabLista.getColumnModel().getColumn(0).setMaxWidth(0);tabLista.getColumnModel().getColumn(1).setPreferredWidth(70);tabLista.getColumnModel().getColumn(2).setPreferredWidth(480);tabLista.getColumnModel().getColumn(3).setPreferredWidth(80);tabLista.getColumnModel().getColumn(4).setPreferredWidth(50);}//fim do carrega grid
Agora estou precisando colocar a opção de ordenar o Jtable ao clicar na coluna desejada. só que se eu marcar a opção autoCreateRowSorter dar o seguinte erro java.lang.ArrayIndexOutOfBoundsException: 0 >= 0
Só funciona se eu deixar essa opção como false.
Como tenho que fazer para colocar essa ordenação no JTable?
Note que internamente, no TableModel, usamos lists com o tipo da classe em questão.
Haverá um objeto da classe por linha.
A
alexpassos
ViniGodoy, achei esses exemplos que você passou muito complicado para um iniciante como eu…
O meu código esta funcionando, consigo adicionar imagens e nos exemplos não consegui.
Uma coisa que não ficou claro pra mim… em um exemplo o cara colocou uma classe sócio com os nomes das colunas… então pra cada vez que utilizar o jTable tenho que criar outra classe?
Se eu consegui com o meu código fazer o jTable ordenar pela coluna que foi clicada no momento ficaria 100%
ViniGodoy
Sim, tem que criar o TableModel.
Ele facilita muito o processo. Mas veja, mesmo com o DefaultTableModel, seu código também existirá, mas estará espalhado em dezenas de métodos de botão, e não será tão otimizado ou fácil de fazer.