package krasa.grepconsole.gui.table.column; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class ButtonEditor<Item> extends DefaultCellEditor { protected JButton button; private String label; private Item item; private boolean isPushed; public ButtonEditor(JCheckBox checkBox) { super(checkBox); button = new JButton(); button.setBorder(null); button.setOpaque(true); button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { fireEditingStopped(); } }); } @Override public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { item = (Item) value; if (isSelected) { button.setForeground(table.getSelectionForeground()); button.setBackground(table.getSelectionBackground()); } else { button.setForeground(table.getForeground()); button.setBackground(table.getBackground()); } setStyle(item); isPushed = true; return button; } protected void setStyle(Item item) { label = getLabel(item); button.setText(label); } protected String getLabel(Object value) { return (value == null) ? "" : value.toString(); } @Override public Object getCellEditorValue() { if (isPushed) { } isPushed = false; return label; } protected void onButtonClicked(Item item) { JOptionPane.showMessageDialog(button, label + ": Ouch!"); } @Override public boolean stopCellEditing() { isPushed = false; return super.stopCellEditing(); } @Override protected void fireEditingStopped() { super.fireEditingStopped(); onButtonClicked(item); } }