[RESOLVIDO]-Alinhar Coluna JTABLE

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:

[code]public class JtabelaM extends AbstractTableModel{
private String [] nomeColuna = new String []
{“Código”,“Materiais”,“Quantidade”,“Valor”,“Tota”,“Data”, “Nº Nota Fiscal”};
private List 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;
}

}[/code]

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

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

[quote=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

[/quote]

Obrigado Nicolas irei olhar.

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?

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.

Consegui

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

fica oculta e travada

=)

Valeu!