Boa tarde, tentei resolver este meu problema em outro tópico, mas não obtive ajuda, talvez pela falta de detalhes, então estou abrindo este novo mais detalhado e com fotos:
É o seguinte, estou com uma JTable modificada para inserir botões, o AbstractTableModel p/ definir a estrutura de linhas e colunas dela, e por fim usei o TableCellRenderer e o TableCellEditor para poder inserir JButtons e JLabels com imagens, tudo esta aparecendo perfeitamente, os botões executam suas ações do modo correto, porém uma das colunas que é uma coluna com botões, que mudam de imagem e actionperformed de acordo com o que o usuário executar durante o tempo de execuçaõ do programa, está dando problema. Porque quando o usuário clicar no botão a imagem deste botão deveria mudar, porém ela só é trocada quando ele interage novamente com a tabela, clicando em outra linha da tabela, ou em outro botão, ou seja a imagem não é trocada instantaneamente.
Segue abaixo algumas imagens mostrando passo a passo a ação do usuário
Parte I:

Parte II:

Parte III:

Parte IV:

Códigos Fonte:
Método getTableCellRendererComponent do TableCellRenderer
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
{
//Component para: Coluna Status
if(column == clsOrcamentoModel.COL_STATUS)
{
boolean status = Boolean.parseBoolean(value.toString());
if(row >=0 && row < 9)
{
if(status)
{
renderLabel.setIcon(new ImageIcon(getClass().getResource(IMG_SELECIONADO)));
}
else
{
renderLabel.setIcon(new ImageIcon(getClass().getResource(IMG_NAO_SELECIONADO_OBRIGATORIO)));
}
}
else
{
if(status)
{
renderLabel.setIcon(new ImageIcon(getClass().getResource(IMG_SELECIONADO)));
}
else
{
renderLabel.setIcon(new ImageIcon(getClass().getResource(IMG_NAO_SELECIONADO)));
}
}
return renderLabel;
}
if(column >= clsOrcamentoModel.COL_ADICIONAR)
{
if(hasFocus)
{
renderButton.setForeground(table.getForeground());
renderButton.setBackground(UIManager.getColor("Button.background"));
}
else if(isSelected)
{
renderButton.setForeground(table.getSelectionForeground());
renderButton.setBackground(table.getSelectionBackground());
}
else
{
renderButton.setForeground(table.getForeground());
renderButton.setBackground(UIManager.getColor("Button.background"));
}
if(column == clsOrcamentoModel.COL_ADICIONAR)
{
clsOrcamentoModel model = (clsOrcamentoModel) table.getModel();
boolean status = Boolean.parseBoolean(model.getValueAt(row, clsOrcamentoModel.COL_STATUS).toString());
if(!status)
{
renderButton.setIcon(new ImageIcon(getClass().getResource(IMG_SELECIONAR)));
renderButton.setToolTipText(TIP_SELECIONAR);
}
else
{
renderButton.setIcon(new ImageIcon(getClass().getResource(IMG_MODIFICAR)));
renderButton.setToolTipText(TIP_MODIFICAR);
}
}
else
{
renderButton.setIcon(new ImageIcon(getClass().getResource(IMG_EXCLUIR)));
renderButton.setToolTipText(TIP_EXCLUIR);
}
return renderButton;
}
return null;
}
Método getTableCellEditorComponent do TableCellEditor:
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column)
{
//Component para: Coluna Status
if(column == clsOrcamentoModel.COL_STATUS)
{
boolean status = Boolean.parseBoolean(value.toString());
if(row >=0 && row < 9)
{
if(status)
{
editLabel.setIcon(new ImageIcon(getClass().getResource(IMG_SELECIONADO)));
}
else
{
editLabel.setIcon(new ImageIcon(getClass().getResource(IMG_NAO_SELECIONADO_OBRIGATORIO)));
}
}
else
{
if(status)
{
editLabel.setIcon(new ImageIcon(getClass().getResource(IMG_SELECIONADO)));
}
else
{
editLabel.setIcon(new ImageIcon(getClass().getResource(IMG_NAO_SELECIONADO)));
}
}
return editLabel;
}
//Component para: Coluna Adicionar/Excluir
if(column >= clsOrcamentoModel.COL_ADICIONAR)
{
if(column == clsOrcamentoModel.COL_ADICIONAR)
{
clsOrcamentoModel model = (clsOrcamentoModel) table.getModel();
boolean status = Boolean.parseBoolean(model.getValueAt(row, clsOrcamentoModel.COL_STATUS).toString());
if(!status)
{
editButton.setIcon(new ImageIcon(getClass().getResource(IMG_SELECIONAR)));
editButton.setToolTipText(TIP_SELECIONAR);
}
else
{
editButton.setIcon(new ImageIcon(getClass().getResource(IMG_MODIFICAR)));
editButton.setToolTipText(TIP_MODIFICAR);
}
}
else
{
editButton.setIcon(new ImageIcon(getClass().getResource(IMG_EXCLUIR)));
editButton.setToolTipText(TIP_EXCLUIR);
}
return editButton;
}
return null;
}
Pode-se perceber que eu fiz toda uma manipulação para retornar nos gets o component correto com a configuração correta para cada tipo de ação do usuário, então esses métodos pegam um valor na minha AbstractTableModel onde possui uma List guardando booleans, e a aprtir desses booleans é tratada a imagem que irá aparecer em cada JLabel e JButton.
Espero que esteja bem detalhado desta vez e alguem possa me dar uma luz, rsrsrsrs, porque estou a 1 semana travado nesta classe, e não cosnigo resolver…já tentei até mesmo gambiarras como dar pack no frame, mudar seleção via código da JTable, ou repaint no Jpanel da Jtable, mas n deu certo.
Agradeço a atenção e uma boa tarde a todos,
Att. Guilherme Dio.