JTable dinâmico

3 respostas
C

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.

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