Galera preciso colocar uma imagem em algumas celulas de um Jtable, Mas como fazer isso?
tentei da forma abaixo mas na celula aparece o caminho da imagem e não a imagem;
se nao me engano tem algo sobre isso na seção de artigos do guj…
victorwss
DefaultTableModel é problemático. Ele acessa métodos polimórficos de dentro do construtor.
Ao invés disso, use alguma coisa que herde de AbstractCellEditor, ou implemente TableCellEditor e herde de Object.
Observe que o retorno do método getTableCellRendererComponent é um java.awt.Component, que é o componente que será usado para renderizar a célula. Normalmente esse componente é um JLabel, mas você pode sobrescrever esse método para ele retornar qualquer outra coisa, inclusive algum componente com imagens.
Fods deste metodo utilizando o TableCellRenderer é que ele monta uma formatação unica para a tabela como o todo, queri algo mais facil, mas pelo jeito não tem, imagina montar uma tabela como a de baixo, eu to fudido.
victorwss
Shakall:
Fods deste metodo utilizando o TableCellRenderer é que ele monta uma formatação unica para a tabela como o todo, queri algo mais facil, mas pelo jeito não tem, imagina montar uma tabela como a de baixo, eu to fudido.
Sim, isso é um saco. Já virei uma madrugada aqui na empresa por causa de uma tabela desse tipo. Virou uma godclass extremamente gambiarrizada com mais de 3 mil linhas. Depois refatorei ela e se tornou 29 classes diferentes, mais ainda são 29 classes de POG.
Basicamente, o jeito mais simples (mas não o melhor, mas já vai quebrar o seu galho) é:
O ideal seria você tentar criar uma classe de CellRenderer por coluna, para acabar com a maioria destes ifs. Mas desse jeito aí em cima já vai resolver.
S
Shakall
então a idéia éque cada vez que ele for desenhar uma celula ele chama este método? assim eu consigo verificar através dos parametros row e columm qual a celula que estou no momento.
victorwss
Exato. Pode usar os demais parâmetros se for necessário.
E é recomendado você reutilizar sempre o mesmo JLabel. O JTable foi projetado para reutilizar os componentes das CellRenderers e CellEditors, assim você não precisa criar centenas deles, um para cada célula. Normalmente basta criar apenas 1.
agora como eu jogo este render na jtable que possuo?
Cara, DefaultTableCellRenderer é uma faca de dois gumes, é importante que você saiba.
O primeiro porém é que DefaultTableCellRenderer EXTENDS JLabel. Esse é um caso de mau uso de herança. Por um lado é fácil, pois a maioria dos detalhes cruéis de renderização da célula já são tratados pelo DefaultTableCellRenderer e o método getTableCellRendererComponent sempre retorna this. O problema é quando você quer mudar o tipo de retorno disso ou então não gosta de algumas das propriedades padrão do DefaultTableCellRenderer.
ivo_costa
Um dia desses eu tava com um problema parecido com o teu, fiz a classe que extendia DefaultCellRender e mesmo assim não funcionava.
Para resolver o problema :