Olá.
Preciso usar um JTable dinâmico(que aumenta as linhas e colunas conforme aumenta o número de registros do Banco de Dados).
Alguém sabe usar alocação dinâmica de memória em JAVA.
Este JTable deve estar integrado com um ScrollPane.
JTable dinâmico
C
3 Respostas
G
Para isso o ideal é utilizar um Arraylist que representará as linhas de sua tabela e um array de String ou Object caso vc utilize mais de um tipo de dado, como os Modelos de Tabela utilizam como parametro um array bidimensional para a inserção dos dados vc terá que implementar algumas alterações na classe DefaultTableModel ou AbstractTableModel
vai abaixo um exemplo que te dará uma boa noção:
public class ModeloTabela extends AbstractTableModel{
private ArrayList linhas = null;
private String [] colunas = null;
private boolean [] colsEdicao;
public Class getColumnClass(int c) {
if (getValueAt(0, c) != null){
return getValueAt(0, c).getClass();
}
else
return null;
}
/**
* Contrutor para a classe, recebendo os dados a serem exibidos
* e as colunas que devem ser criadas.
* @param dados
* @param colunas
*/
public ModeloTabela(ArrayList dados, String[] colunas, boolean [] edicao){
setLinhas(dados);
setColunas(colunas);
colsEdicao = edicao;
}
/**
* @param lista_linhas
* @param cabecalho
* @param edicao
*/
/**
* Retorna o numero de colunas no modelo
* @see javax.swing.table.TableModel#getColumnCount()
*/
public int getColumnCount() {return getColunas().length;}
/**
* Retorna o numero de linhas existentes no modelo
* @see javax.swing.table.TableModel#getRowCount()
*/
public int getRowCount() {return getLinhas().size();}
/**
* Obtem o valor na linha e coluna
* @see javax.swing.table.TableModel#getValueAt(int, int)
*/
public Object getValueAt(int rowIndex, int columnIndex) {
// Obtem a linha, que é uma String []
Object [] linha = (Object [])getLinhas().get(rowIndex);
// Retorna o objeto que esta na coluna
return linha[columnIndex];
}
public String[] getColunas() {return colunas;}
public ArrayList getLinhas() {return linhas;}
public void setColunas(String[] strings) {colunas = strings;}
public void setLinhas(ArrayList list) {linhas = list;}
/**
* Seta o valor na linha e coluna
* @see javax.swing.table.TableModel#setValueAt(java.lang.Object, int, int)
*/
public void setValueAt(Object value, int row, int col){
// Obtem a linha, que é uma String []
Object [] linha = (Object [])getLinhas().get(row);
// Altera o conteudo no indice da coluna passado
linha[col] = (Object)value;
// dispara o evento de celula alterada
fireTableCellUpdated(row,col);
}
/**
* Retorna se a celula pode ser editada
* @see javax.swing.table.TableModel#isCellEditable(int, int)
*/
public boolean isCellEditable(int row, int col){
return colsEdicao[col];
}
/**
* Adiciona o array na linha
*/
public void addRow( Object [] dadosLinha){
getLinhas().add(dadosLinha);
// Informa a jtable de que houve linhas incluidas no modelo
// COmo adicionamos no final, pegamos o tamanho total do modelo
// menos 1 para obter a linha incluida.
int linha = getLinhas().size()-1;
fireTableRowsInserted(linha,linha);
return;
}
/**
* Remove a linha pelo indice informado
* @param row
*/
public void removeRow(int row){
getLinhas().remove(0);
// informa a jtable que houve dados deletados passando a
// linha reovida
fireTableRowsDeleted(row,row);
}
/**
* Remove a linha pelo valor da coluna informada
* @param val
* @param col
* @return
*/
public boolean removeRow(String val, int col){
// obtem o iterator
Iterator i = getLinhas().iterator();
int linha = 0;
// Faz um looping em cima das linhas
while(i.hasNext()){
// Obtem as colunas da linha atual
String[] linhaCorrente = (String[])i.next();
linha++;
// compara o conteudo String da linha atual na coluna desejada
// com o valor informado
if( linhaCorrente[col].equals(val) ){
getLinhas().remove(linha);
// informa a jtable que houve dados deletados passando a
// linha removida
fireTableRowsDeleted(linha,linha);
return true;
}
}
// Nao encontrou nada
return false;
}
/**
* Retorna o nome da coluna.
* @see javax.swing.table.TableModel#getColumnName(int)
*/
public String getColumnName(int col){
return getColunas()[col];
}
}
[size=“11”][color=“red”]* Editado: Lembre-se de utilizar BBCode em seus códigos[/color][/size] :joia:
C
Obrigado Gian.
Vou tentar fazer.
Abraço.
Charles
T
Boas, então este TABLEMODEL funciona também para tipos especificafos por nós?
Criado 31 de maio de 2005
Ultima resposta 1 de fev. de 2011
Respostas 3
Participantes 3
Alura O que é Python? — um guia completo para iniciar nessa linguagem de programação Acesse agora o guia sobre Python e inicie sua jornada nessa linguagem de programação: o que é e para que serve, sua sintaxe e como iniciar nela!
Casa do Codigo Engenharia de Prompt para Devs: Um guia para aprender a... Por Ricardo Pupo Larguesa — Casa do Codigo