import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.EventObject; import javax.swing.AbstractCellEditor; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.SwingUtilities; import javax.swing.event.CellEditorListener; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableCellEditor; import javax.swing.table.TableCellRenderer; public class TableMitButtonsClass { private JTable table; private DefaultTableModel model; String[][] data1 = { new String[] { "Hund", "Pizza", "Rudern" }, new String[] { "Pferd", "Hamburger", "Gewichtheben" }, new String[] { "Fadenwurm", "Foie gras", "Fingerhakeln" } }; String[] colNames1 = new String[] { "Viecher", "Haute Cuisine", "Kraftmeierei" }; String[][] data2 = { new String[] { "Gilera", "Spengler", "Vetter" }, new String[] { "AJS", "K\u00fcfer", "Oheim" }, new String[] { "Megola", "Stellmacher", "Base" } }; String[] colNames2 = new String[] { "Mopeds", "Berufe", "Mischpoke" }; public TableMitButtonsClass() { init(); } private void init() { model = new DefaultTableModel(); table = new JTable(model); reload(); JScrollPane sPane = new JScrollPane(table); JFrame frame = new JFrame("Tabelle mit Buttons"); frame.add(sPane, BorderLayout.CENTER); JButton butt = new JButton("Neues TableModel"); butt.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { reload(); } }); frame.add(butt, BorderLayout.SOUTH); frame.setSize(600, 250); frame.setLocationRelativeTo(null); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } private void reload() { if (table.getColumnCount() == 0 || table.getColumnName(1).equals("Berufe")) { model.setDataVector(data1, colNames1); } else { model.setDataVector(data2, colNames2); } table.getColumn(table.getColumnName(1)).setCellRenderer( new JButtonRenderer()); table.getColumn(table.getColumnName(1)).setCellEditor( new JButtonEditor()); } public static void main(String[] args) { SwingUtilities.invokeLater(() -> new TableMitButtonsClass()); } } class JButtonRenderer implements TableCellRenderer { JButton button = new JButton(); public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { table.setShowGrid(true); table.setGridColor(Color.LIGHT_GRAY); button.setText(value.toString()); button.setToolTipText("Press " + value.toString()); return button; } } class JButtonEditor extends AbstractCellEditor implements TableCellEditor { JButton button; String txt; public JButtonEditor() { super(); button = new JButton(); button.setOpaque(true); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.out.println("Buttontext: " + button.getText()); } }); } public Object getCellEditorValue() { return null; } public boolean isCellEditable(EventObject anEvent) { return true; } public boolean shouldSelectCell(EventObject anEvent) { return false; } public boolean stopCellEditing() { return super.stopCellEditing(); } public void cancelCellEditing() { } public void addCellEditorListener(CellEditorListener l) { } public void removeCellEditorListener(CellEditorListener l) { } public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { txt = (value == null) ? "" : value.toString(); button.setText(txt); return button; } }