The first column contains the buttons and if you click on any and then add lines, then a white line remains when adding lines. How to update the table normally. 
package main; import java.awt.EventQueue; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.LinkedList; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JScrollPane; import java.awt.BorderLayout; import java.awt.Component; import javax.swing.JPanel; import javax.swing.AbstractCellEditor; import javax.swing.JButton; import javax.swing.JTable; import javax.swing.ListSelectionModel; import javax.swing.SwingConstants; import javax.swing.table.AbstractTableModel; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.TableCellEditor; import javax.swing.table.TableCellRenderer; public class TableTest { private JFrame frame; private JTable table; private TableModel model; private int count = 0; public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { TableTest window = new TableTest(); window.frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } public TableTest() { initialize(); } private void initialize() { frame = new JFrame(); frame.setTitle("Example"); frame.setBounds(100, 100, 450, 300); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JScrollPane scrollPane = new JScrollPane(); frame.getContentPane().add(scrollPane, BorderLayout.CENTER); model = new TableModel(); model.addRow(createRow()); table = new JTable(model); table.setDefaultRenderer(String.class, new RowRender()); table.getColumnModel().getColumn(0).setCellEditor(new ButtonEditor()); table.getColumnModel().getColumn(0).setCellRenderer(new ButtonRenderer()); // table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); scrollPane.setViewportView(table); JPanel panel = new JPanel(); frame.getContentPane().add(panel, BorderLayout.SOUTH); JButton btnClear = new JButton("CLEAR"); btnClear.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { getModel().clearHistory(); } }); JButton btnCreateRow = new JButton("CREATE ROW"); btnCreateRow.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { getModel().addRow(createRow()); } }); panel.add(btnCreateRow); panel.add(btnClear); } class TableModel extends AbstractTableModel { private String[] column = { "One", "Two" }; private LinkedList<ArrayList<Object>> rows; private static final long serialVersionUID = 1L; TableModel() { this.rows = new LinkedList<>(); } public String getColumnName(int columnIndex) { for (int i = 0; i < column.length; i++) { if (i == columnIndex) { return column[i]; } } return ""; } @Override public int getColumnCount() { return column.length; } @Override public int getRowCount() { return rows.size(); } @Override public Object getValueAt(int rowIndex, int columnIndex) { return rows.get(rowIndex).get(columnIndex); } public Class<?> getColumnClass(int columnIndex) { return String.class; } void addRow(ArrayList<Object> row) { rows.addFirst(row); while (rows.size() >= 11) { rows.removeLast(); } fireTableRowsInserted(0, getRowCount()); } public boolean isCellEditable(int rowIndex, int columnIndex) { if (columnIndex == 0) { return true; } return false; } public void clearHistory() { rows.clear(); fireTableDataChanged(); } } public TableModel getModel() { return model; } public ArrayList<Object> createRow() { ArrayList<Object> row = new ArrayList<Object>(); JButton button = new JButton(count + " Click me"); button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(frame, "Pressed"); } }); row.add(button); row.add("Text"); count++; return row; } class ButtonEditor extends AbstractCellEditor implements TableCellEditor { private static final long serialVersionUID = 1L; private JButton jButton; public ButtonEditor() { } public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { jButton = (JButton) value; return (JButton) value; } public Object getCellEditorValue() { return jButton; } public JButton getjButton() { return jButton; } public void setjButton(JButton jButton) { this.jButton = jButton; } } public class ButtonRenderer implements TableCellRenderer { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int rowIndex, int vColIndex) { return (Component) value; } } public class RowRender extends DefaultTableCellRenderer { private static final long serialVersionUID = 1L; public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { Component cell = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); setHorizontalAlignment(SwingConstants.CENTER); return cell; } } }
Clearall lines erases. Or explain normally how to get an error. - Denis