import java.awt.*; import java.awt.event.*; import java.util.*; import javax.swing.*; import javax.swing.table.*; public 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(); renderButton.setText("HELLO"); editButton = new JButton(); editButton.setFocusPainted( true ); renderButton.setForeground(table.getSelectionForeground()); renderButton.setBackground(table.getSelectionBackground()); 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( "Add" ); return editButton; } public Object getCellEditorValue() { return text; } public void actionPerformed(ActionEvent e) { //fireEditingStopped(); System.out.println( e.getActionCommand() + " : " + table.getSelectedRow()); table.setValueAt("HELLO",table.getSelectedRow(),1); } }