Olá pessoal! É possível colocar em cada célula de um jtable alguma coisa parecida com essa imagem que eu fiz aqui

Bem… seria uma info no topo a esquerda, uma informação central e um selectbox no botton left, ha ela ainda tem q mudar de cor, mas mudar de cor eu sei como faz
da pra fazer isso?
se sim o que eu tenho que fazer? não faço a menor ideia, com TabelCellRenderer?
JTable - Cell com mais de uma informação?
4 Respostas
Cara, meio complicado, mas só uma idéia. Essa informação não poderia ser uma imagem? Talvez usando Canvas você consiga fazer algo assim, mas não conheço nenhum componente Swing que faça isso. Espero que mais alguem ajude.
na verdade… só estou precisando de uma maneira de exibir o resultado da implementação de um algoritmo greedy e um algoritmo A* (A-estrela), e dessa forma eu poderia colocar o numero da casa, o valor da f.obj, e pintar a cell de uma cor apropriada, se for inicio, fim ou uma barreira.
era só pra isso mesmo
No caso vc proporia um jtable com canvas em cada cell??
eu poderia fazer tipo um componente compX onde ele herdaria um jpanel e nesse panel eu poderia colocar o que quizesse e colocar em cada cell da minha jtable?! :roll: eu acho q eu não sei como fazer isso…
N3kr0n: há uma saída para o que você quer fazer, mas é um tanto trabalhosa. Experimente o seguinte:
-
Crie uma classe para armazenar os dados do valor que você deseja exibir na célula da JTable. Daqui para a frente vou supor que o nome dessa classe é ResultadoCalculo;
-
Crie um componente gráfico especializado para exibir o valor da classe ResultadoCalculo. Uma boa pedida para isso é criar uma classe derivada de JLabel ou JPanel, sobrescrevendo o método paintComponent();
-
No TableModel que você está usando para prover os valores da JTable existe um método chamado getColumnClass(). Reescreva este método de modo que, quando o índice da coluna for aquele da célula onde você quer exibir o valor de ResultadoCalculo, o resultado seja a definição desta classe (ou seja, você vai retornar ResultadoCalculo.class). Há também um método chamado getValueAt() - reescreva este método de modo que, quando o índice da coluna for aquele da célula onde você quer exibir o valor de ResultadoCalculo, o resultado seja uma instância da classe ResultadoCalculo;
-
Crie uma classe que implemente a interface TableCellRenderer - sugiro usar o nome ResultadoCalculoRenderer, e herdar da classe DefaultTableCellRenderer - e sobrescreva o método getTableCellRendererComponent() de forma a retornar uma instância do componente criado no passo 2. O objeto [value] que é passado como parâmetro a este método é do tipo ResultadoCalculo, então você pode fazer um cast neste objeto e usá-lo para atribuir valores ao componente gráfico retornado pelo método;
-
Por fim, use o método
JTable.setDefaultRenderer()para dizer à JTable que, quando tiver de exibir objetos do tipo ResultadoCalculo, use o Renderer que foi criado no passo 4. Seu código provavelmente ficará assim:
Esse não é o único jeito de resolver o problema, há uma ótima discussão sobre isso no link abaixo:
http://java.sun.com/docs/books/tutorial/uiswing/components/table.html
Boa sorte!
Uma outra forma, seria herdar de JComponent e criar um componente que faz exatamente o que você quer, caixa com imagem. Dai bastaria setar o CellEditor com esse componente customizado. Agora para exibir os valores realmente não sei como fazer. Eu acho que você deveria tentar criar uma imagem em tempo de execução com java 2D ou algo assim. Talvez uma Api gráfica da apache ou sei lá. Eu sei que tem, mas desconheço. Infelizmente nunca precisei trabalhar com isso.