Bom Dia pessoal do GUJ, estou com um problema, que pode ser considerado simples.
Estou utilizando o TableCellRenderer+TableCellEditor para adicionar JLabels e JButtons em uma unica JTable, segue o código a seguir dos métodos principais(getTableCellRendererComponent() e getTableCellEditorComponent()) os quais fazem aparecer os Components na JTable:
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;
}
//Component para: Coluna Adicionar/Excluir
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;
}
//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;
}
Porém, como pode-se perceber, o icone dos JButtons e dos JLabels mudam de acordo com mudanças de valores na JTable, que são ações do usuário que modificam valores numa outra classe que é um AbstractTableModel.
O problema é, que ao mudar um valor na tabela pelo setValueAt no abstracttablemodel, ele automaticamente chama o evento desse celleditor, mas ele modifica somente o icon do jlabel, pois ele é o primeiro a ser tratado ali e retornado e não muda o icone do jbutton…o icone do botao só muda quando o usuario muda a linha selecionada da jtable ou alguma outra interação…
Alguem pode me dar um help? obrigado.