java – 使JTable单元不可编辑
发布时间:2020-12-15 05:07:28 所属栏目:Java 来源:网络整理
导读:当用户双击时,我试图使JTable的所有单元格都不可编辑.我已经阅读了很多论坛帖子,一般的共识是创建一个新的表模型类,扩展DefaultTableModel然后重写方法isCellEditable(int row,int column).我做了所有这些,现在当我运行我的程序(小程序)时,没有任何东西出现
当用户双击时,我试图使JTable的所有单元格都不可编辑.我已经阅读了很多论坛帖子,一般的共识是创建一个新的表模型类,扩展DefaultTableModel然后重写方法isCellEditable(int row,int column).我做了所有这些,现在当我运行我的程序(小程序)时,没有任何东西出现在单元格中.注意我这个学期有一个教授不认为applet已经过时了…
表模型的代码: public class MyTableModel extends DefaultTableModel { public boolean isCellEditable(int row,int column) //override isCellEditable //PRE: row > 0,column > 0 //POST: FCTVAL == false always { return false; } } Code in my class: **NOTE** this class extends JPanel private JScrollPane storesPane; private JTable storesTable; Code in the Constructor: storesTable = new JTable(tableData,COL_NAMES); //tableData and COL_NAMES are passed in storesTable.setModel(new MyTableModel()); storesPane = new JScrollPane(storesTable); storesTable.setFillsViewportHeight(true); add(storesPane,BorderLayout.CENTER); 希望你们中的一些Java大师可以找到我的错误:) 解决方法
这一行创建了一个新的JTable并在后台隐式创建了一个DefaultTableModel,它保存了JTable所需的所有正确数据:
storesTable = new JTable(tableData,COL_NAMES); 这一行有效地删除了上面隐式创建的表模型,该表模型保存了所有表的数据,并将其替换为不包含任何数据的表模型: storesTable.setModel(new MyTableModel()); 您需要为MyTableModel类提供构造函数,并在该构造函数中调用超级构造函数,并将当前传递给其构造函数中的表的数据传入. 例如., public class MyTableModel extends DefaultTableModel { public MyTableModel(Object[][] tableData,Object[] colNames) { super(tableData,colNames); } public boolean isCellEditable(int row,int column) { return false; } } 然后你可以像这样使用它: MyTableModel model = new MyTableModel(tableData,COL_NAMES); storesTable = new JTable(model); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |