我想制作一个不可编辑的单元格,如果它包含的数据等于“VIDE”,我搜索了解决方案,但我找不到任何解决方案,这是我要编辑的方法:
private void UpdateTables(int id) throws Exception{
DefaultTableModel model1 = (DefaultTableModel)ChosenGroupsTable.getModel();
DefaultTableModel model2 = (DefaultTableModel)NotChosenGroupsTable.getModel();
// Reset Tables
model1.setRowCount(0);
model2.setRowCount(0);
List<EnrollsVO> enrollsList = new ArrayList<>();
StudentsVO studentvo = StudentsDao.getInstance().getStudentByUserId(id);
try {
enrollsList = EnrollsDao.getInstance().loadAllStudentScreen(studentvo.getStudentID());
//System.out.println("Number of groups retrieved from the database: " + enrollsList.size());
} catch (Exception ex) {
ex.printStackTrace();
}
for(int i=0 ; i<enrollsList.size() ; i++){
EnrollsVO enroll = enrollsList.get(i);
Object[] rowData = new Object[8];
rowData[0] = enroll.getEnrollID();
rowData[1] = enroll.getCourse().getCourseName();
rowData[2] = ResponsablesDao.getInstance().getResponsableByID(enroll.getCourse().getResponsable().getResponsableID()).getFirstName();
rowData[3] = enroll.getSectionExam();
if(enroll.getCourse().getCourse_TypeID() == 2 || enroll.getCourse().getCourse_TypeID() == 4){
rowData[4] = enroll.getSectionTD();
}else{
rowData[4] = "VIDE";
// System.out.println(enroll.getCourse().getCourse_TypeID());
}
if(enroll.getCourse().getCourse_TypeID() == 2 || enroll.getCourse().getCourse_TypeID() == 4){
rowData[5] = enroll.getGroupeTD();
}else{
rowData[5] = "VIDE";
}
if(enroll.getCourse().getCourse_TypeID() == 3 || enroll.getCourse().getCourse_TypeID() == 4){
rowData[6] = enroll.getSectionTP();
}else{
rowData[6] = "VIDE";
}
if(enroll.getCourse().getCourse_TypeID() == 3 || enroll.getCourse().getCourse_TypeID() == 4){
rowData[7] = enroll.getGroupeTP();
}else{
rowData[7] = "VIDE";
}
// Check if all values from row 3 to row 7 are equal to 0
boolean allZero = true;
/*for (int j = 3; j <= 7; j++) {
if (Integer.parseInt(rowData[j].toString()) != 0) {
allZero = false;
break;
}
}
// If all values from row 3 to row 7 are equal to 0, set rowData to "VIDE"
if (allZero) {
for (int j = 3; j <= 7; j++) {
rowData[j] = "VIDE";
}
}
*/
if (enroll.getSectionExam() != 0 && enroll.getSectionTD() != 0 && enroll.getGroupeTD()!= 0 && enroll.getSectionTP() != 0 && enroll.getGroupeTP()!= 0) {
model1.addRow(rowData);
} else {
model2.addRow(rowData);
}
}
NotChosenGroupsTable.getColumnModel().getColumn(3).setCellRenderer(new GandSJInternalFrame.CustomCellRenderer());
NotChosenGroupsTable.getColumnModel().getColumn(4).setCellRenderer(new GandSJInternalFrame.CustomCellRenderer());
NotChosenGroupsTable.getColumnModel().getColumn(5).setCellRenderer(new GandSJInternalFrame.CustomCellRenderer());
NotChosenGroupsTable.getColumnModel().getColumn(6).setCellRenderer(new GandSJInternalFrame.CustomCellRenderer());
NotChosenGroupsTable.getColumnModel().getColumn(7).setCellRenderer(new GandSJInternalFrame.CustomCellRenderer());
}
我尝试使用 isCellEditable 方法并覆盖它,以及许多其他解决方案。
isCellEditable 允许管理 JTable 中的可编辑性。
JTable 的默认表模型属于 DefaultTableModel 类,但该类中的 isCellEditable 方法将始终返回 true。最好的选择是子类化 DefaultTableModel 并让它使单元格可以按照您想要的方式进行编辑。然后将该子类的一个实例设置为 JTable 中的表模型。