如何使 jtable 中的某些单元格不可编辑?

问题描述 投票:0回答:1

我想制作一个不可编辑的单元格,如果它包含的数据等于“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 方法并覆盖它,以及许多其他解决方案。

java swing jtable
1个回答
0
投票
TableModel 接口中的

isCellEditable 允许管理 JTable 中的可编辑性。

JTable 的默认表模型属于 DefaultTableModel 类,但该类中的 isCellEditable 方法将始终返回 true。最好的选择是子类化 DefaultTableModel 并让它使单元格可以按照您想要的方式进行编辑。然后将该子类的一个实例设置为 JTable 中的表模型。

© www.soinside.com 2019 - 2024. All rights reserved.