[RESOLVIDO]-Alinhar Coluna JTABLE

6 respostas
S

Boas...

Seguinte estou criando meu modelo de Jtable usando/seguindo alguns modelos conseguidos aqui mesmo no fórum,
porém minha dificuldade está em fazer o alinhamento de colunas.

Tenho a coluna valor; Poderia me informar alguns exemplos para deixar seu conteúdo alinhado à direita com formato moeda?

Obrigado.

código:

public class JtabelaM extends AbstractTableModel{
    private String [] nomeColuna = new String [] 
    {"Código","Materiais","Quantidade","Valor","Tota","Data", "Nº Nota Fiscal"};
    private List<ProdutoObra> linhas;
    private Produtos_ObrasADO pro = new Produtos_ObrasADO();
            
    /* Cria um TableModel vazio. */
    public JtabelaM() {
        try {
            linhas = pro.ListarPO();
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(JtabelaM.class.getName()).log(Level.SEVERE, null, ex);
        } catch (SQLException ex) {
            Logger.getLogger(JtabelaM.class.getName()).log(Level.SEVERE, null, ex);
        } catch (Exception ex) {
            Logger.getLogger(JtabelaM.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
        
    /* Cria um TableModel carregado com
	 * a lista de materiais especificada. */
	public JtabelaM(List<ProdutoObra> listaDeProdutos) {
            linhas = new ArrayList<ProdutoObra> (listaDeProdutos);
	}
        
        
    @Override
    public int getRowCount() {
        // Retorna o tamanho da lista
        return linhas.size();
        
    }
    @Override
    public int getColumnCount() {
        // Está retornando o tamanho do array "colunas".
        return nomeColuna.length;
    }

    /* Retorna o nome da coluna no índice especificado.
	 * Este método é usado pela JTable para saber o texto do cabeçalho. */
    @Override
    public String getColumnName(int columnIndex) {
	// Retorna o conteúdo do Array que possui o nome das colunas
	// no índice especificado.
	return nomeColuna[columnIndex];
    };
        
    /* Retorna a classe dos elementos da coluna especificada.
	 * Este método é usado pela JTable na hora de definir o editor da célula. */
	@Override
	public Class<?> getColumnClass(int columnIndex) {
		// Retorna a classe referente a coluna especificada.
		// Aqui é feito um switch para verificar qual é a coluna
		// e retornar o tipo adequado. As colunas são as mesmas
		// que foram especificadas no array "colunas".
		switch (columnIndex) {
		case 0: // Primeira coluna é o codigo, que é uma int.
			return Integer.class;
		case 1: // Segunda coluna é o Material, que é uma String..
			return String.class;
		case 2: // Terceira coluna é a Quantidade de material,
				
			return String.class;
		case 3: // Quarta coluna é a mensalidade, um double.
			return String.class;
                case 4:
                        return String.class;
                case 5:
                        return String.class;
                case 6:
                        return String.class;
		default:
			// Se o índice da coluna não for válido, lança um
			// IndexOutOfBoundsException (Exceção de índice fora dos limites).
			// Não foi necessário verificar se o índice da linha é inválido,
			// pois o próprio ArrayList lança a exceção caso seja inválido.
			throw new IndexOutOfBoundsException("columnIndex out of bounds");
		}
	}
    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        // Pega o produto da linha especificada.
        ProdutoObra aux = linhas.get(rowIndex);
        // Retorna o campo referente a coluna especificada.
		// Aqui é feito um switch para verificar qual é a coluna
		// e retornar o campo adequado. As colunas são as mesmas
		// que foram especificadas no array "colunas".
        
        switch(columnIndex)
        {
            case 0:
                return aux.getCodigo();
            case 1:
                return aux.getProduto();
            case 2:
                return aux.getQuantidade();
            case 3:
                return aux.getValor();
            case 4:
                return aux.getTotal();
            case 5:
                return aux.getDia()+"/"+aux.getMes()+"/"+aux.getAno();
            case 6:
                return aux.getNf();
            default:
			// Se o índice da coluna não for válido, lança um
			// IndexOutOfBoundsException (Exceção de índice fora dos limites).
			// Não foi necessário verificar se o índice da linha é inválido,
			// pois o próprio ArrayList lança a exceção caso seja inválido.
			throw new IndexOutOfBoundsException("columnIndex out of bounds");
        }
    }
    /* Seta o valor da célula especificada
	 * pelos índices da linha e da coluna.
	 * Aqui ele está implementado para não fazer nada,
	 * até porque este table model não é editável. */
	public void setValueAt(Object aValue, int rowIndex, int columnIndex) {};

	/* Retorna um valor booleano que define se a célula em questão
	 * pode ser editada ou não.
	 * Este método é utilizado pela JTable na hora de definir o editor da célula.
	 * Neste caso, estará sempre retornando false, não permitindo que nenhuma
	 * célula seja editada. */
	@Override
	public boolean isCellEditable(int rowIndex, int columnIndex) {
		return false;
	}
}

6 Respostas

S

Consegui em formato moeda decimal, só não consigo alinhar
=/

N

Opa, Salax, tudo bem?

Neste caso, há uma diferença do que você quer: os TableModels servem para preencher os valores dentro da tabela. Caso você queira renderizar a tabela (alinhar, mudar cor, etc), você tem que trabalhar com os ColumnModels.

Saca só esse link que tem um exemplo simples e prático. Não é difícil não:
http://www.guj.com.br/java/35438-alinhamento-de-colunas-no-jtable

S

Nicolas Fernandes:
Opa, Salax, tudo bem?

Neste caso, há uma diferença do que você quer: os TableModels servem para preencher os valores dentro da tabela. Caso você queira renderizar a tabela (alinhar, mudar cor, etc), você tem que trabalhar com os ColumnModels.

Saca só esse link que tem um exemplo simples e prático. Não é difícil não:
http://www.guj.com.br/java/35438-alinhamento-de-colunas-no-jtable

Obrigado Nicolas irei olhar.

S

Consegui, ta lindo.

direita.setHorizontalAlignment(SwingConstants.RIGHT); jTable1.setAutoResizeMode( JTable.AUTO_RESIZE_OFF ); jTable1.setModel(new JtabelaM(1)); jTable1.getColumnModel().getColumn(3).setCellRenderer(direita); jTable1.getColumnModel().getColumn(4).setCellRenderer(direita); jTable1.getColumnModel().getColumn(0).setPreferredWidth(0); // não fica oculta jTable1.getColumnModel().getColumn(1).setPreferredWidth(250); jTable1.getColumnModel().getColumn(2).setPreferredWidth(100); jTable1.getColumnModel().getColumn(3).setPreferredWidth(100); jTable1.getColumnModel().getColumn(4).setPreferredWidth(100);

mas a coluna 0 eh codigo e gostaria de deixar oculta, mesmo setando 0 ele fica visivel, tem outro metodo pra ocultar?

S

Bom deu tudo certo =)

a dificuldade agora é:

como deixar o tamanho fixo das colunas sem que o usuário interfira;
ou como deixar a coluna oculta?

Obrigado.

S

Consegui

jTable1.getColumnModel().getColumn(0).setMaxWidth( 0 );

fica oculta e travada

=)

Valeu!

Criado 20 de novembro de 2013
Ultima resposta 23 de nov. de 2013
Respostas 6
Participantes 2