Ação em botão dentro de um linha do Jtable

Bom dia Galera,

Bom, depois de ter pesquisado na internet achei um código muito bom (pelo menos eu achei) para colocar botões em um coluna de uma Jtable, até aqui mesmo no fórum teve gente que já utilizou esse código, porém não ví ninguém tendo o problema que estou tendo, após os botões irem parar na jtable eu não consigo resgatar a ação de click deles, ou seja, posso clicar a vontade nos malditos botões e os mesmos não executam o método actionPerformed.

Alguém pode me ajudar? (Devo estar fazendo alguma cagada)

Segue abaixo o código:

[code]class BotaoVisualizarTabelaProgramadas extends AbstractCellEditor
implements TableCellRenderer, TableCellEditor, ActionListener {

JTable table;
JButton renderButton;
JButton editButton;
String text;

public BotaoVisualizarTabelaProgramadas(JTable table, int column) {
super();
this.table = table;

    renderButton = new JButton();
    
    editButton = new JButton();
    editButton.setFocusPainted(false);
    editButton.addActionListener(this);
    
    TableColumnModel columnModel = table.getColumnModel();
    columnModel.getColumn(column).setCellRenderer(this);
    columnModel.getColumn(column).setCellEditor(this);
}

@Override
public Component getTableCellRendererComponent(
        JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
    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"));
    }
 
   renderButton.setText((value == null) ? "" : value.toString());
    return renderButton;
}

@Override
public Component getTableCellEditorComponent(
        JTable table, Object value, boolean isSelected, int row, int column) {
    text = (value == null) ? "" : value.toString();
    return editButton;
}

@Override
public Object getCellEditorValue() {
    return text;
}

@Override
public void actionPerformed(ActionEvent e) {
    fireEditingStopped();
    System.out.println(e.getActionCommand() + " : " + table.getSelectedRow());
}

}
[/code]

a chamada está assim:

try { BotaoVisualizarTabelaProgramadas botaoExibir = new BotaoVisualizarTabelaProgramadas(jTProgramadas, 11); BotaoExcluirTabelaProgramadas botaoExluir = new BotaoExcluirTabelaProgramadas(jTProgramadas, 12); botaoExibir.renderButton.setIcon(new ImageIcon(Util.getImagem("icon_lupa.png"))); botaoExluir.renderButton.setIcon(new ImageIcon(Util.getImagem("delete_icon.png"))); botaoExluir.text = "sss"; } catch (IOException ex) { System.out.println(ex); }

Descupa, mas não conseguir ver o erro,… utilizo o mesmo metodo aqui e funciona, segue abaixo:

class ButtonColumn extends AbstractCellEditor implements TableCellRenderer,
    TableCellEditor, ActionListener
    {
        JTable table;
        JButton renderButton, editButton;
        String text;
        public ButtonColumn(JTable table, int column)
        {
            super();
            this.table = table;
            renderButton = new JButton();
            editButton = new JButton();
            editButton.setFocusPainted(false);
            editButton.addActionListener(this);

            TableColumnModel columnModel = table.getColumnModel();
            columnModel.getColumn(column).setCellRenderer( this );
            columnModel.getColumn(column).setCellEditor( this );
        }
        public Object getCellEditorValue() {
            return text;
        }

        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
            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"));
            }

            renderButton.setText( (value == null) ? "" : value.toString() );
            return renderButton;
        }

        public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
            text = (value == null) ? "" : value.toString();
            editButton.setText( text );
            return editButton;
        }

        public void actionPerformed(ActionEvent arg0) {
            fireEditingStopped();
            //list.remove(table.getSelectedRow());
            myModel.removeRow(table.getSelectedRow());
        }

    }

a unica diferença é que essa acima uso como sendo uma subclass da class

public class ManterPedidoService extends JTable
myModel = new MyTableModel(pedidos, colunas, edicao);
        setModel(myModel);
        new ButtonColumn(this,5);

Tenso…não consigo entender o porque não funciona…já to pirando aqui com esse problema :frowning:

Como assim sub class da classe?

Segue abaixo passo a passo como faço:

Obs.: A tabela (jtable) já está desenhada no formulario, ok?

Construindo os dados na tabela:

jTProgramadas.setModel(new ModeloTabelaMadeirasProgramadas(dadosMadeiras));
jTProgramadas.setColumnModel(defineCabecalhoTabelaMadeirasProgramadas());
jTProgramadas.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
jTProgramadas.getColumnModel().getColumn(0).setHeaderRenderer(new AlinhaTituloColunaTabela(SwingConstants.CENTER));
        jTProgramadas.getColumnModel().getColumn(0).setCellRenderer(new AlinhaColunaTabela(SwingConstants.LEFT));
        jTProgramadas.getColumnModel().getColumn(1).setHeaderRenderer(new AlinhaTituloColunaTabela(SwingConstants.CENTER));
        jTProgramadas.getColumnModel().getColumn(1).setCellRenderer(new AlinhaColunaTabela(SwingConstants.LEFT));
        jTProgramadas.getColumnModel().getColumn(2).setHeaderRenderer(new AlinhaTituloColunaTabela(SwingConstants.CENTER));
        jTProgramadas.getColumnModel().getColumn(2).setCellRenderer(new AlinhaColunaTabela(SwingConstants.LEFT));
        jTProgramadas.getColumnModel().getColumn(3).setHeaderRenderer(new AlinhaTituloColunaTabela(SwingConstants.CENTER));
        jTProgramadas.getColumnModel().getColumn(3).setCellRenderer(new AlinhaColunaTabela(SwingConstants.LEFT));
        jTProgramadas.getColumnModel().getColumn(4).setHeaderRenderer(new AlinhaTituloColunaTabela(SwingConstants.CENTER));
        jTProgramadas.getColumnModel().getColumn(4).setCellRenderer(new AlinhaColunaTabela(SwingConstants.LEFT));
        jTProgramadas.getColumnModel().getColumn(5).setHeaderRenderer(new AlinhaTituloColunaTabela(SwingConstants.CENTER));
        jTProgramadas.getColumnModel().getColumn(5).setCellRenderer(new AlinhaColunaTabela(SwingConstants.LEFT));
        jTProgramadas.getColumnModel().getColumn(6).setHeaderRenderer(new AlinhaTituloColunaTabela(SwingConstants.CENTER));
        jTProgramadas.getColumnModel().getColumn(6).setCellRenderer(new AlinhaColunaTabela(SwingConstants.LEFT));
        jTProgramadas.getColumnModel().getColumn(7).setHeaderRenderer(new AlinhaTituloColunaTabela(SwingConstants.CENTER));
        jTProgramadas.getColumnModel().getColumn(7).setCellRenderer(new AlinhaColunaTabela(SwingConstants.LEFT));
        jTProgramadas.getColumnModel().getColumn(8).setHeaderRenderer(new AlinhaTituloColunaTabela(SwingConstants.CENTER));
        jTProgramadas.getColumnModel().getColumn(8).setCellRenderer(new AlinhaColunaTabela(SwingConstants.LEFT));
        jTProgramadas.getColumnModel().getColumn(9).setHeaderRenderer(new AlinhaTituloColunaTabela(SwingConstants.CENTER));
        jTProgramadas.getColumnModel().getColumn(9).setCellRenderer(new AlinhaColunaTabela(SwingConstants.LEFT));
        jTProgramadas.getColumnModel().getColumn(10).setHeaderRenderer(new AlinhaTituloColunaTabela(SwingConstants.CENTER));
        jTProgramadas.getColumnModel().getColumn(10).setCellRenderer(new AlinhaColunaTabela(SwingConstants.LEFT));
        jTProgramadas.getColumnModel().getColumn(11).setHeaderRenderer(new AlinhaTituloColunaTabela(SwingConstants.CENTER));
        jTProgramadas.getColumnModel().getColumn(11).setCellRenderer(new AlinhaColunaTabela(SwingConstants.LEFT));
        jTProgramadas.getColumnModel().getColumn(12).setHeaderRenderer(new AlinhaTituloColunaTabela(SwingConstants.CENTER));
        jTProgramadas.getColumnModel().getColumn(12).setCellRenderer(new AlinhaColunaTabela(SwingConstants.LEFT));

Formatando o cabeçalho do grid:

[code] private DefaultTableColumnModel defineCabecalhoTabelaMadeirasProgramadas() {

    // declaração das variáveis
    DefaultTableColumnModel cabecalhoTabela;        // modelo contendo o cabeçalho da tabela
    TableColumn coluna;                             // coluna do cabeçalho

    // início do método
    cabecalhoTabela = new DefaultTableColumnModel();

    // criando a coluna Nome
    coluna = new TableColumn();
    coluna.setModelIndex(ModeloTabelaMadeirasProgramadas.COLUNA_CODIGO);
    coluna.setHeaderValue("CÓDIGO");
    coluna.setPreferredWidth(200);
    cabecalhoTabela.addColumn(coluna);

    // criando a coluna Descrição
    coluna = new TableColumn();
    coluna.setModelIndex(ModeloTabelaMadeirasProgramadas.COLUNA_TIPO_ACO);
    coluna.setHeaderValue("AÇO");
    coluna.setPreferredWidth(200);
    cabecalhoTabela.addColumn(coluna);
    
    coluna = new TableColumn();
    coluna.setModelIndex(ModeloTabelaMadeirasProgramadas.COLUNA_DATA_INICIO_PROCESSO);
    coluna.setHeaderValue("DATA INICIO PROCESSO");
    coluna.setPreferredWidth(500);
    cabecalhoTabela.addColumn(coluna);
    
    coluna = new TableColumn();
    coluna.setModelIndex(ModeloTabelaMadeirasProgramadas.COLUNA_DATA_FIM_PROCESSO);
    coluna.setHeaderValue("DATA FIM PROCESSO");
    coluna.setPreferredWidth(500);
    cabecalhoTabela.addColumn(coluna);
    
    coluna = new TableColumn();
    coluna.setModelIndex(ModeloTabelaMadeirasProgramadas.COLUNA_LARGURA);
    coluna.setHeaderValue("LARGURA");
    coluna.setPreferredWidth(500);
    cabecalhoTabela.addColumn(coluna);
    
    coluna = new TableColumn();
    coluna.setModelIndex(ModeloTabelaMadeirasProgramadas.COLUNA_COMPRIMENTO);
    coluna.setHeaderValue("COMPRIMENTO");
    coluna.setPreferredWidth(500);
    cabecalhoTabela.addColumn(coluna);
    
    coluna = new TableColumn();
    coluna.setModelIndex(ModeloTabelaMadeirasProgramadas.COLUNA_PESO);
    coluna.setHeaderValue("PESO");
    coluna.setPreferredWidth(500);
    cabecalhoTabela.addColumn(coluna);
    
    coluna = new TableColumn();
    coluna.setModelIndex(ModeloTabelaMadeirasProgramadas.COLUNA_ESPESSURAINICIAL);
    coluna.setHeaderValue("ESPESSURA INICIAL");
    coluna.setPreferredWidth(500);
    cabecalhoTabela.addColumn(coluna);
    
    coluna = new TableColumn();
    coluna.setModelIndex(ModeloTabelaMadeirasProgramadas.COLUNA_ESPESSURAFINAL);
    coluna.setHeaderValue("ESPESSURA FINAL");
    coluna.setPreferredWidth(500);
    cabecalhoTabela.addColumn(coluna);
    
    coluna = new TableColumn();
    coluna.setModelIndex(ModeloTabelaMadeirasProgramadas.COLUNA_TOL_ESPESSURA_INF);
    coluna.setHeaderValue("TOLERANCIA ESPESSURA INFERIOR");
    coluna.setPreferredWidth(500);
    cabecalhoTabela.addColumn(coluna);
    
    coluna = new TableColumn();
    coluna.setModelIndex(ModeloTabelaMadeirasProgramadas.COLUNA_TOL_ESPESSURA_SUP);
    coluna.setHeaderValue("TOLERANCIA ESPESSURA SUPERIOR");
    coluna.setPreferredWidth(500);
    cabecalhoTabela.addColumn(coluna);
    
    coluna = new TableColumn();
    coluna.setModelIndex(ModeloTabelaMadeirasProgramadas.COLUNA_BOTAO_VISUALIZAR);
    coluna.setHeaderValue("");
    coluna.setPreferredWidth(50);
    
    cabecalhoTabela.addColumn(coluna);
    
    
    coluna = new TableColumn();
    coluna.setModelIndex(ModeloTabelaMadeirasProgramadas.COLUNA_BOTAO_EXCLUIR);
    coluna.setHeaderValue("");
    coluna.setPreferredWidth(50);
    cabecalhoTabela.addColumn(coluna);
    return cabecalhoTabela;
}[/code]

Inserindo os botões no grid:

[code] try {

        ButtonColumn botaoExibir = new ButtonColumn(jTProgramadas, 11);
        ButtonColumn botaoExcluir = new ButtonColumn(jTProgramadas, 12);
        botaoExibir.renderButton.setIcon(new ImageIcon(Util.getImagem("icon_lupa.png")));
        botaoExcluir.renderButton.setIcon(new ImageIcon(Util.getImagem("delete_icon.png")));
        
    } catch (IOException ex) {
        java.util.logging.Logger.getLogger(TelaProgramacaoDeMadeiras.class.getName()).log(Level.SEVERE, null, ex);
    }

[/code]