Part04 ☀️
大约 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, "删除成功");
}
总结
课堂作业
- 参考上述的讲义,完成删除工作量功能吧!!🎤 完成了后,请将完成的截图和运行情况截图上传到任务平台,有加分哦!
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字段判断是新增还是编辑。整个逻辑可以使用流程图表示(如下):👇

WorkloadDialog类的修改如下👇 关注阴影部分,就是修改的地方
然后点击确认,就可以修改构造方法了
同时需要使用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);
}
至此,修改工作量功能已经完成,可以测试一下数据回显和修改效果。
