据我所知,理论上您可以通过创建 AbstractTableModel 强制 jTable 不可编辑,并通过始终返回 false 来覆盖以下方法(尽管这不是必需的,因为默认方法来自AbstractTableModel 已经返回 false)。
@Override
public boolean isCellEditable(int row, int column) {
return false;
}
但似乎我仍然无法弄清楚如何使这项工作适合我的代码。我究竟做错了什么?这是我的代码:
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
public class Datagrid extends AbstractTableModel {
private static final long serialVersionUID = -1080095595481949205L;
private String[] title;
private String[][] data;
private JTable table;
private JFrame frm;
public Datagrid(String[] title, String[][] data) {
this.title = title;
this.data = data;
create_table();
}
public JTable getTable() {
return table;
}
private void create_table() {
table = new JTable(data, title);
frm = new JFrame();
frm.getContentPane().add(new JScrollPane(table));
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frm.pack();
frm.setVisible(true);
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
return false;
}
@Override
public int getColumnCount() {
return table.getColumnCount();
}
@Override
public int getRowCount() {
return table.getRowCount();
}
@Override
public Object getValueAt(int row, int column) {
return table.getValueAt(row, column);
}
}
最佳答案
首先,不要在模型中创建 UI 元素...
其次,不要在事件调度线程之外创建 UI 元素
第三(正如 cubanacan 所指出的),您还没有将模型应用到 table 上......
public static void main(String args[]) {
EventQueue.invokeLater(new Runnable() {
public void run() {
TableModel model = new Datagrid(); // <-- Create a new instance of the model
table = new JTable(model); // <-- Apply it to the table..
frm = new JFrame();
frm.getContentPane().add(new JScrollPane(table));
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frm.pack();
frm.setVisible(true);
}
});
}
古巴人着火了...
第四,以下内容会使您的程序崩溃。这些方法由表调用,以便说明如何配置自身。
public int getColumnCount() {
return table.getColumnCount();
}
@Override
public int getRowCount() {
return table.getRowCount();
}
@Override
public Object getValueAt(int row, int column) {
return table.getValueAt(row, column);
}
您应该引用您尝试建模的内部数据结构。
通读 How to Use Tables 可能会有所帮助
关于java - 如何强制 jTable 不可编辑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13304446/