Part04 ☀️

YangeIT大约 4 分钟

Part04 ☀️

课程内容

  • 删除工作量功能 ✏️
  • 修改工作量功能 ✏️
  • 答辩验收 ✏️

1.删除工作量功能

删除工作量功能

在ButtonPanelEditor中删除按钮的点击事件中,调用MainFrame类中的deleteWorkload方法,删除指定的工作量记录,并刷新表格数据。

 deteBtn.addActionListener(e -> {
            fireEditingStopped();//  通知表格编辑结束
            //弹出对话框,提示是删除
            int confirm = JOptionPane.showConfirmDialog(table, 
                "确定删除此行吗?", "确认删除", JOptionPane.YES_NO_OPTION);
            if (confirm == JOptionPane.YES_OPTION) { // 如果用户确认删除,则调用方法执行删除(传入被删除的行)
                //todo 执行删除逻辑
                System.out.println("正在执行删除逻辑");
                frame.deleteWorkload(editedRow);
            }
        });








 


MainFrame.java类中,删除工作量功能,通过调用DataUtil类中的deleteWorkload方法,删除指定的工作量记录,并刷新表格数据。

// 删除工作量
public void deleteWorkload(int selectedRow) {
    // 判断是否已选择数据
    if (selectdRow == -1) {
        JOptionPane.showMessageDialog(this, "请先选择要删除的记录");
        return;
    }
    // 弹出对话框提问是否删除
    int confirm = JOptionPane.showConfirmDialog(this, "确定要删除这条记录吗?", "确认删除",
            JOptionPane.YES_NO_OPTION);
    if (confirm != JOptionPane.YES_OPTION){
        return;
    }
    //  删除数据
    String workloadId = (String) tableModel.getValueAt(selectedRow, 0);
    DataUtil.deleteWorkload(workloadId);
    refreshData();
    JOptionPane.showMessageDialog(this, "删除成功");
}















 
 


总结

课堂作业

  1. 参考上述的讲义,完成删除工作量功能吧!!🎤 完成了后,请将完成的截图和运行情况截图上传到任务平台,有加分哦!

2.编辑工作量功能

编辑工作量功能

在ButtonPanelEditor中编辑按钮的点击事件中,调用MainFrame类中的editWorkload方法,编辑指定的工作量记录,并刷新表格数据。

// 修改按钮事件
editBtn.addActionListener(e -> {
    fireEditingStopped();//  通知表格编辑结束
    frame.editWorkload(editedRow);// 调用方法执行修改(传入被修改的行)
});



 

修改工作量功能,通过调用DataUtil类中的getWorkloadById方法获取指定的工作量记录,并创建一个WorkloadDialog对话框,将记录传递给对话框,以便用户编辑。编辑完成后,调用refreshData方法刷新表格数据。

需要注意的是编辑采用的和新增一样的显示组件,因此需要在WorkloadDialog类中添加对应的编辑功能。

// 修改工作量
public void editWorkload(int selectedRow) {
    // 获取选中的行
    if (selectedRow == -1) {
        JOptionPane.showMessageDialog(this, "请先选择要编辑的记录");
        return;
    }
    // 获取工作量ID
    String workloadId = (String) tableModel.getValueAt(selectedRow, 0);
    // 根据ID获取工作量对象
    Workload workload = DataUtil.getWorkloadById(workloadId);
    // 创建工作量对话框
    WorkloadDialog dialog = new WorkloadDialog(this, workload, currentUser);
    // 显示对话框
    dialog.setVisible(true);
}

上述代码出现了错误,构造方法没有workload这个字段,因此需要修改WorkloadDialog类的构造方法,添加workload字段。并且根据workload字段判断是新增还是编辑。整个逻辑可以使用流程图表示(如下):👇

image
image

WorkloadDialog类的修改如下👇 关注阴影部分,就是修改的地方

快速修改的方式 然后点击确认,就可以修改构造方法了 image

同时需要使用if语句完成编辑和新增的区分,如编辑含有原来的值,需要设置到对话框提示框中,注意下面代码的阴影部分:

public WorkloadDialog(JFrame parent, Workload workload, User currentUser) {
    //调用父类的构造方法,设置标题
    super(parent, workload == null ? "添加工作量" : "编辑工作量", true);
    this.parent = (MainFrame) parent;
    this.currentUser = currentUser;
    if (workload == null) {
        workload = new Workload();
    } else {
        this.workload = workload;
    }
    setSize(600, 400);
    setLocationRelativeTo(parent);
    //设置一个最外围的面板
    JPanel panel = new JPanel(new BorderLayout(10, 10));
    panel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
    //设置第一个部分:表单面板(4行2列)
    JPanel formPanel = new JPanel(new GridLayout(4, 2, 10, 10));
    //添加第一行
    formPanel.add(new JLabel("教师名称:"));
    //用来保存教师姓名的组件
    teacherField = new JTextField();
    //教师这一列采用下拉列表选择教师姓名
    JComboBox<String> teacherComboBox = new JComboBox<>();
    for (User user : DataUtil.getAllTeachers()) {
        teacherComboBox.addItem(user.getUsername());
    }
    //当选择了教师姓名,将教师姓名保存到teacherField中
    teacherComboBox.addActionListener(e -> {
        String selectedTeacher = (String) teacherComboBox.getSelectedItem();
        teacherField.setText(selectedTeacher);
    });
    if (workload != null) {
        teacherField.setText(workload.getTeacher());
    }
    formPanel.add(teacherComboBox);
    //第二行数据设置
    formPanel.add(new JLabel("工作日期 (yyyy-MM-dd):"));
    dateField = new JTextField();
    //默认设置当前日期(将当前日期格式化)
    if (workload != null && workload.getWorkDate() != null) {
        dateField.setText(workload.getWorkDate());
    } else {
        dateField.setText(new SimpleDateFormat("yyyy-MM-dd").format(new Date()));
    }
    formPanel.add(dateField);
    //第三行数据设置
    formPanel.add(new JLabel("工作小时:"));
    hoursField = new JTextField();
    if (workload != null && workload.getHours() != 0) {
        hoursField.setText(String.valueOf(workload.getHours()));
    }
    formPanel.add(hoursField);
    //第四行数据设置
    formPanel.add(new JLabel("工作描述:"));
    descArea = new JTextArea(3, 20);
    if (workload != null && workload.getDescription() != null) {
        descArea.setText(workload.getDescription());
    }
    formPanel.add(new JScrollPane(descArea));

    //将表单面板添加到最外围面板
    panel.add(formPanel, BorderLayout.CENTER);

    // 按钮面板
    JPanel buttonPanel = new JPanel();
    JButton saveBtn = new JButton("保存");
    saveBtn.addActionListener(e -> saveWorkload());
    JButton cancelBtn = new JButton("取消");
    cancelBtn.addActionListener(e -> dispose());
    buttonPanel.add(saveBtn);
    buttonPanel.add(cancelBtn);
    panel.add(buttonPanel, BorderLayout.SOUTH);

    add(panel);
}


 


 
 
 
 
 





















 
 
 





 
 
 
 
 




 
 
 




 
 
 

















至此,修改工作量功能已经完成,可以测试一下数据回显和修改效果。

image
image