Exibir JButton na Coluna de um JTable [Resolvido]

Ola!

estou editando em cima do exemplo que veio junto com o AutoFiltro e TableModel do ViniGodoy (http://www.guj.com.br/posts/list/100793.java) e Gostaria de criar uma coluna com botoes
mais não sei como fazer isso pois eu crio a coluna só que nela aparece o JButton em String.

abaixo vai o a parte do código que eu acrescentei (o resto ta intacto)

[code]

},
//aqui começa minha coluna
Botoes {
public Class<?> getColumnClass() {
return JButton.class;
}

    public Object getValue(String element) {
        return new JButton(element);
    }
}

//e vai até aqui

;

…[/code]

acho que tenho que sobre escrever o método getRenderer() que retorna um TableCellRenderer mais não sei o que eu colocaria nele

aguardo resposta

até mais!

Acho que seria algo deste tipo.

http://forums.sun.com/thread.jspa?messageID=3969411#3969411

é isso mesmo que eu quero só que isso é com DefaultTableModel
eu queria adaptar para ColumnTableModel do ViniGodoy e não faço a minima ideia de como ficaria

No link acima, ele criou uma classe chamada ButtonColumn.

Simplesmente use essa classe.

   class ButtonColumn extends AbstractCellEditor
        implements TableCellRenderer, TableCellEditor, ActionListener
    {
        JTable table;
        JButton renderButton;
        JButton 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 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 Object getCellEditorValue()
        {
            return text;
        }
 
        public void actionPerformed(ActionEvent e)
        {
            fireEditingStopped();
            System.out.println( e.getActionCommand() + " : " + table.getSelectedRow());
        }
    }

Ela independe do model da tabela utilizado.

obrigado a todos, agora deu certo!

eu achava que tinha que se inserir JButton’s direto na coluna ao invés de receber uma String e deixar a classe ButtonColumn fazer o resto

até mais e obrigado a todos mais uma vez!

Não estou conseguindo fazer os eventos nos botões inseridos no jTable, gostaria de quando clicar no botão de uma linha tivesse um ação… Eu percebi que a classe ButtonColumn vem com um método ActionPerformed, eu não consegui utiliza-lo, alguém poderia me ajudar?

Opa bom dia.

Tem como eu pegar o actionPerformed acessando esse método por outra classe?

Tenho um projeto com várias telas e tabelas e em uma dessas tabelas eu preciso que apareça o botão.
Criei uma classe separada só com o ButtonColumn desse exemplo, e depois lá no código de chamada da tabela eu chamei essa classe assim

ButtonColumn buttonColumn = new ButtonColumn(ServicosTabela, 4);

Até aí tudo bem, a tabela aparece com os botões como deveria. Mas eu precisava pegar o actionPerformed desses botões na classe do formulário, e não na classe ButtonColumn.

Tem como?

Meu problema é igual ao do ricardoluizv e do jonatarussi…

Não consigo usar o botão tbm. Vcs conseguiram resolver ?

1 curtida

Opa.

Eu resolvi. Mas em vez de colocar um botão na célula da tabela, eu estou pegando o evento do clique na tabela e executo as ações a partir daí.

Abraço.

Bom dia janatarussi

Não entendi muito bem, vc usa o evento mouse no jtable ?
Eu fiz um poste aqui sobre meu “probleminha” ak

é nisso que estou travado…

Gostei dessa sua ideia vou tentar fazer algo aqui

Abraço

Como posso fazer para que dependendo do valor de uma coluna a imagem do botão seja diferente?

ex:.

Se o valor da coluna Realizado for maior que 0 a imagem a ser mostrada no botão é delete_disabled.png
Se o valor da coluna Realizado for igual a 0 a imagem a ser mostrada no botão é delete.png

A questão de desabilitar a celula de acordo com o valor eu já consegui fazer, porém queria que para o usuário desse a sensação de que o botão está desabilitado, por isso estou querendo alterar a imagem da celula de com base no valor de uma determinada coluna.