Não não tem. Era isso q eu gostaria de saber. Sobre esse tratamento.
Segue minha classe:
public enum ComunicacaoColumns implements Column<Comunicacao_Dias>
{
CARRO("Carro")
{
//Esse método precisa retornar para o table o ID da pessoa
public Object getValue(Comunicacao_Dias p)
{
return p.getCarro();
}
},
COMUNICACAO_ANTERIOR("Comunicação Anterior")
{
public Object getValue(Comunicacao_Dias p)
{
return p.getComunicacao_anterior();
}
},
ULTIMA_COMUNICACAO("Última Comunicação")
{
public Object getValue(Comunicacao_Dias p)
{
return p.getUltima_comunicacao();
}
},
DIAS("Dias")
{
public Object getValue(Comunicacao_Dias p)
{
return p.getDias();
}
};
//Daqui para baixo, são configurações que valem para todas as colunas
private final String nome;
private ComunicacaoColumns(String nome)
{
this.nome = nome;
}
public Class< ? > getColumnClass()
{
return Object.class;
}
public String getName()
{
return nome;
}
public TableCellRenderer getRenderer()
{
return null;
}
public int getModelIndex()
{
return ordinal();
}
public int getWidth()
{
return 100;
}
Como seria um exemplo desse tratamento?
Criar um outro construtor recebendo parâmetro do tipo int e retornando?
Como seria chamado isso dentro da classe?
Era isso mesmo. O engraçado é que os dados dessa coluna agora ficaram alinhados para a direta (ao contrario de quando estava retornando do tipo String). E ao contrário das outras colunas.
É assim mesmo? Existe algum método que alinha isso centralizado por exemplo, ou isso ja faz parte do layout do table e é outra história?
[quote=ViniGodoy]Como está o seu TableModel (ou seus Columns)? É ele que indica como as colunas devem ser ordenadas.
E tem sim, um tratamento especial para inteiros.[/quote]
o problema não é como é ordenado o problema é que eu não quero que ordene olhe a imagem da minha JTable para entenderem melhor o que eu quero
porque pelo menos ao meu ver poder ordenar uma coluna de documento ou telefone fica esquisito mais se o usuário querer pegar todos os telefones que tenha o mesmo código de área ou se lembrar de parte do documento o personalizar seria ótimo
Você tem a opção de desabilitar totalmente o filtro, mas eu deixaria a possibilidade de ordenação. Fica meio ridículo, mas é um preço muito pequeno a se pagar por uma funcionalidade tão bacana.
E vai saber, as vezes seu usuário vai querer listar todos os números ordenados por código de área…
Vini parabéns pelo post… Me poupou um tempão! :shock:
Ficou muito bom esse seu AutoFiltro e o table model!
Vou começar a estudar o projeto do mark agora e talvez implementá-lo no meu projeto.
Parece ser um pouco mais interessante por trabalhar com anotações. Tenho tabelas do banco com praticamente 50 ou mais colunas.
É um pouco doloroso escrever enums para tabelas grandes assim. :shock:
Mas ainda assim é bem melhor que trabalhar com DefaultTableModel e de quebra tem o auto filtro que é muito bom!
Realmente o modelo do Mark é bem mais interessante! Dispensa comentários!
Vini, o auto filtro realmente funfa de boa com o modelo do Mark. Vcs estão de parabéns…
Nem gosto de imaginar se tivesse que construir isso do zero… :shock:
[quote=Marky.Vasconcelos]Hehe, fizemos um bom trabalho juntos(na realidade foi separado, mas os dois são tão independentes que funcionam bem juntos, ironico não?)
Obrigado aos comentários também.[/quote]
Sim, é irônico…
Mark, você não pensa em implementar o auto filtro direto no seu projeto não? Seria uma boa :?:
Baixei os fontes do seu projeto e estou estudando-os.
Mark,
Como vc trata os dados do tipo Double para ficarem formatados com as casas decimais e tal e alinhar o texto a direita?
No meu caso, os campos na classe POJO estão declarados como BigDecimal, mas preciso mostrá-los como double porque como BigDecimal os números ficam sem formatação
e quando o número é 0 ele mostra como 0E-9…
@author jsilva
*/
public class DoubleFormatter implements Formatter{
DecimalFormat formatter = new DecimalFormat();
public Object format(Object o) {
String valor = formatter.format(o);
return valor;
}
public Object parse(Object o) {
return Double.parseDouble(o.toString());
}
public String getName() {
return “double”;
}
}[/code]
Essa é a classe que fiz para formatar o valor, mas como ele retorna uma String os valores ficam alinhados a esquerda!
Como vc faz pra informar que a classe de uma determinada coluna é um Double ou outro tipo qualquer?
Depende do que voce quer fazer, mostrar um double na tabela não vai resolver seu problema, se voce quiser formatado voce pode usar o DecimalFormatter e converter para String mesmo.
Só algo importante, o método format deve declarar o retorno do mesmo tipo que voce quer exibir na coluna, nos eu caso seria mais ou menos o seguinte:
import java.text.DecimalFormat;
import mark.utils.bean.Formatter;
/**
*
* @author jsilva
*/
public class DoubleFormatter implements Formatter{
DecimalFormat formatter = new DecimalFormat("##,##");
public String format(Object o) {
String valor = formatter.format(o);
return valor;
}
public Object parse(Object o) {
return Double.parseDouble(o.toString());
}
public String getName() {
return "double";
}
}
Tá, no format não declarei o retorno do que quero exibir porque não quero limitar as casas, assim como tá ele faz o que quero que é colocar o separador de milhares e só.
Mas na verdade, o que quero é especificar o tipo de classe de uma determinada coluna, por exemplo com uma anotação “columnType” onde eu informe o tipo de classe
a ser utilizada para determinada coluna.
Não posso utilizar uma Double direto porque preciso do tipo como BigDecimal, os campos têm muitas casas decimais e não posso perder a precisão deles.
Mas voltando… é basicamente isso, pelo que percebi, vc utiliza o tipo declarado na variável para definir o tipo de classe a ser utilizado na coluna.
O que quero é poder mudar o tipo manualmente.
Eu também tinha pensado no columnType, mas ia ser meio idiota ficar declarando nas annotations esse tipo, ainda mais que em um caso voce pode querer mostrar como String e outro como double, e isso não seria resolvido com a annotation.
Só se lembre, o método parse recebe um objeto do mesmo tipo que o format retorna.
[quote=Marky.Vasconcelos]Eu também tinha pensado no columnType, mas ia ser meio idiota ficar declarando nas annotations esse tipo, ainda mais que em um caso voce pode querer mostrar como String e outro como double, e isso não seria resolvido com a annotation.
Só se lembre, o método parse recebe um objeto do mesmo tipo que o format retorna.[/quote]
É verdade, a solução do Formatter foi bem mais inteligente, ficou realmente muito bom.
Parabéns pelo trabalho.
Vini, eu me deparei com a seguinte situação. Quando eu mando filtrar os dados do table eu faço um FOR EACH e pego a lista de dados na ordem em que foram filtrados ou ordenados, até ai normal.
Mas e quando eu não tenho todos os atributos da minha classe de negócio no meu table. Nesse caso, minha classe de negócio (lista) tem 8 atributos, e fica inviável representar todos no table, então eu só exibo 3 atributos. A questão é: existe a possibilidade de quando ordenado esses 3 atributos no meu table, ordenar juntamente minha lista com todos os 8 atributos?