Problema com TableCellRenderer(Simples)[NÃO RESOLVIDO]

0 respostas
guilherme.dio

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.

Criado 1 de outubro de 2011
Respostas 0
Participantes 1