Já tentei antes com repaint, paintComponent, paint e os eventos do JFrame de restaurar ou redimensionar. E ainda não consegui… estou procurando… se achar eu aviso aqui…
achei q tinha resolvido, mas simplesmente não fez nada… continua apagando o desenho…
Alguém tem alguma idéia pro desenho ficar lá?
Lembrando q estou desenhando com Graphics.
wellington7
Continuo com o problema… alguém…?
wellington7
Consegui usar o Renderer com ícone ao invés de desenhar com Graphics, mas o ícone fica em todas as linhas da coluna q eu adicionar… Eu quero que minha figura (ícone ou desenho do Graphics) fique em apenas uma célula (sem apagar se eu mover a janela…)!
Será que não tem como fazer isso…?
wellington7
Agora encontrei um tal de “TableCellEditor”, e to tentando usar com o comando setDefaultEditor… tá complicado…
ViniGodoy
Ok, o que exatamente você quer fazer?
Eu entendi que você quer colocar um ícone em alguma das células da tabela? E esse ícone deve variar de acordo com o objeto que a linha representa. É isso?
Normalmente, eu uso o renderer para isso. Redesenhar com o Graphics é um péssimo caminho, complicadíssimo, se comparado a usar um TableCellRenderer. O TableCellEditor serve apenas caso você queira que o usuário edite o valor da célula.
O renderer recebe também a linha e coluna da tabela. Você pode criar um filho de DefaultTableCellRenderer e, quando estiver na linha e coluna em que não deseja a figura, chame o método da classe superior. Nos demais casos, implemente o método para retornar a imagem.
/** * This renderer extends a component. It is used each time a * cell must be displayed. */publicclassMyTableCellRendererextendsJLabelimplementsTableCellRenderer{privatestaticfinallongserialVersionUID=1L;publicMyTableCellRenderer(){super();}/** * This method is called each time a cell in a column * using this renderer needs to be rendered. */publicComponentgetTableCellRendererComponent(JTabletable,Objectvalue,booleanisSelected,booleanhasFocus,introwIndex,intvColIndex){/** 'value' is value contained in the cell located at * (rowIndex, vColIndex) * 'vColIndex' = Visual Column Index */setOpaque(true);//MUST do this for background to show up.if(hasFocus)super.setBackground(Color.LIGHT_GRAY);elseif(isSelected)super.setBackground(Color.GRAY);elsesuper.setBackground(Color.WHITE);// Set tool tip if desired//setToolTipText("Clique para selecionar esta célula");// Since the renderer is a component, return itselfreturnthis;}publicvoidpaintComponent(Graphicsg){// primeiro, pintamos um JLabel normal:super.paintComponent(g);// calculamos o retângulo baseado no tamanho do componente:Rectangler=super.getBounds();Rectangler2=g.getClipBounds();r=(Rectangle)r.clone();System.out.println("x:"+r.x+" y:"+r.y+" w:"+(int)r.getMaxX()+" h:"+(int)r.getMaxY());intcol=r.x/LARGURA_CELULA;introw=r.y/ALTURA_CELULA;if(Logica.contato[col][row]!=null){Logica.contato[col][row].desenha(r2,g);}}// The following methods override the defaults for performance reasonspublicvoidvalidate(){}publicvoidrevalidate(){}protectedvoidfirePropertyChange(StringpropertyName,ObjectoldValue,ObjectnewValue){}publicvoidfirePropertyChange(StringpropertyName,booleanoldValue,booleannewValue){}}