AbstractTableModel e ImageIcon

7 respostas
F

Olá
tenho uma AbstractTableModel aí la no getValueAt, método sobrescrito, return um ImageIcon, mas aí tanto eu colocando o caminhao absoluto ou relativo, na jtable aparece o caminhao ao inves de aparece a imagem, alguem tem ideia do tem q mudar? obrigado...

@Override
	public Object getValueAt(int row, int col) {
		  
		return new ImageIcon("C:/Documents and Settings/Administrador/Meus documentos/workspace/Dou-Shou-Qi/tigre.jpeg");
	}

7 Respostas

ViniGodoy

Para que a JTable exiba imagens, você precisa fornecer para ela um TableCellRenderer personalizado.

Veja no site da Sun a explicação de como fazer isso:
http://java.sun.com/docs/books/tutorial/uiswing/components/table.html

F
ViniGodoy:
Para que a JTable exiba imagens, você precisa fornecer para ela um TableCellRenderer personalizado.

Veja no site da Sun a explicação de como fazer isso:
http://java.sun.com/docs/books/tutorial/uiswing/components/table.html

Certo, to usando DefaultCellRenderer ai no metodo:
@Override
	public Component getTableCellRendererComponent(JTable tabela, Object valor, boolean isSelected, boolean hasFocus, int row, int col) {
		// TODO Auto-generated method stub
		
		if(valor.getClass() == Animal.class) {
	           return new ImageIcon("tigre.jpeg");
	}

ImageIcon nao eh um Component, ai nao da pra retorna nesse metodo...

ViniGodoy

Então retorna um JLabel com o seu ImageIcon dentro.

@Override public Component getTableCellRendererComponent(JTable tabela, Object valor, boolean isSelected, boolean hasFocus, int row, int col) { super.getTableCellRendererComponent(tabela, valor, isSelected, hasFocus, row, col); if(valor.getClass() == Animal.class) { setIcon((ImageIcon)valor); //Retorne o ImageIcon no seu model. setText(""); } return this; }

F

estranho q ele coloca o imageicon em todas as celulas, como se todas tivessem um animal.class…

ViniGodoy

Posta aí seu TableModel.

F
public class DouShouQiTableModel extends AbstractTableModel {
       
	Object bichos[][] = new Object[7][9];
     
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	public DouShouQiTableModel() {
		Tigre tigre;
		bichos[0][0] = tigre = new Tigre(6);
		bichos[0][2] = new Elefante(8);
		bichos[1][1] = new Gato(2);
		bichos[2][2] = new Lobo(4);
		bichos[4][2] = new Leopardo(5);
		bichos[5][1] = new Cao(3);
		bichos[6][0] = new Tigre(6);
		bichos[6][2] = new Rato(1);
		
		
	}
	@Override
	public int getColumnCount() {
		
		return 9;
	}

	@Override
	public int getRowCount() {
		// TODO Auto-generated method stub
		return bichos.length;
	}

	@Override
	public Object getValueAt(int row, int col) {
      return bichos[row][col];
       
	}

	@Override
	public String getColumnName(int column ) {
		// TODO Auto-generated method stub
		return "";
	}
	

}
ViniGodoy

Pelo seu TableModel, todas as células tem um Animal.class.

Você deve testar o valor da coluna no getValueAt(), para retornar a informação certa do animal.

Criado 23 de maio de 2008
Ultima resposta 26 de mai. de 2008
Respostas 7
Participantes 2