我知道理論上你可以通過創建一個AbstractTableModel來強制jTable不可編輯,並且通過始終返回false來覆蓋以下方法(儘管這不是必須的,因爲AbstractTableModel中的默認方法已經返回false)。如何強制jTable不可編輯?
@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);
}
}
1)爲了更好地幫助越早,張貼[SSCCE(http://sscce.org/)(它需要一個'main(String [])'把它放在屏幕上。2)請參閱[使用多個JFrames,好/壞實踐?](http://stackoverflow.com/a/9554657/418556)。特別是,'frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);'會在多次調用create_table()時引發問題。 3)'create_table()'請學習常見的[Java命名約定](http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#73307)(特別是用於名稱)的類,方法和屬性名稱並一致使用它。 –
你還沒有設置表模型到JTable – cubanacan
@cubanacan你應該做出這個答案 – MadProgrammer