import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellEditor;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class MultiRowEditDemo extends JFrame {
private JTable table;
private DefaultTableModel model;
public MultiRowEditDemo() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400, 300);
setLocationRelativeTo(null);
table = new JTable(model) {
@Override
public TableCellEditor getCellEditor(int row, int column) {
int modelColumn = convertColumnIndexToModel(column);
if (modelColumn == 1) {
return new DefaultCellEditor(new JTextField());
} else {
return super.getCellEditor(row, column);
}
}
};
table.setSurrendersFocusOnKeystroke(true);
table.putClientProperty("terminateEditOnFocusLost", true);
addButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
model.addRow(new Object[]{"", ""});
}
});
JScrollPane scrollPane = new JScrollPane(table);
getContentPane().setLayout(new BorderLayout());
getContentPane().add(addButton, BorderLayout.NORTH);
getContentPane().add(scrollPane, BorderLayout.CENTER);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new MultiRowEditDemo().setVisible(true);
}
});
}
}