Question
How can I make a JTable non-editable in Java Swing?
DefaultTableModel model = new DefaultTableModel();
JTable table = new JTable(model);
// Disable editing the table cells by overriding isCellEditable
model.setValueAt("Row1, Cell1", 0, 0);
model.setValueAt("Row1, Cell2", 0, 1);
// Usage of model.isCellEditable()
if (!table.isCellEditable(row, column)) {
// Implement logic when cell is not editable
}
Answer
To make a JTable non-editable in Java Swing, the approach involves overriding the default editing behavior. This can be accomplished using a custom table model or implementing a simple method.
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
public class NonEditableTable {
public static void main(String[] args) {
JFrame frame = new JFrame("Non-Editable JTable Example");
DefaultTableModel model = new DefaultTableModel(new Object[][]{{"Editable Cell 1", "Editable Cell 2"}}, new String[]{"Column 1", "Column 2"}) {
@Override
public boolean isCellEditable(int row, int column) {
return false; // All cells non-editable
}
};
JTable table = new JTable(model);
frame.add(new JScrollPane(table));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
}
Solutions
- Use a `DefaultTableModel` and override the `isCellEditable()` method to return `false` for all cells.
- Alternatively, set the table's default cell editor to `null`.
Common Mistakes
Mistake: Forgetting to implement isCellEditable method, leading to editable cells.
Solution: Override the isCellEditable method in your table model class to return false.
Mistake: Using default JTable without a custom model, which allows editing by default.
Solution: Always associate JTable with a custom table model that restricts editing.
Helpers
- JTable non-editable
- Java Swing JTable
- prevent editing JTable
- Java JTable example
- JTable disable editing