在动力节点javase图书管理系统项目视频的24P,添加借阅数据实现页面刷新功能
视频讲解了当在图书管理页面选中图书点击借阅,选中用户借阅后,图书管理页面的图书状态会从入库刷新为出借
视频讲解的给图书管理页面添加刷新的步骤
1. 需要刷新图书管理的界面,就需要拿到图书管理界面的对象,调用refresh()方法,
2. 在BookLendViewCtrl.java中当前的是没有的
3. 找到图书查询的界面:BookViewCtrl,在图书查询界面上有一个成员变量( private TableView bookTableView;),
4. 将成员变量从BookViewCtrl复制到在BookLendViewCtrl中,加上get,set方法
5. 然后到add()方法中调用 bookTableView.refersh() 方法刷新,刷新图书查询界面中的数据
6. 需要在查询界面中将这个变量传过去, 找到lend方法, 里面调用了 InitLendStage() 方法,点过去
7. 进入 BookViewCtrl 中的initLendStage 方法
8. 通过 controller传过去调用 controller 中的set方法 controller.setBookTableView(bookTableView);
我尝试进行的对借阅管理页面添加刷新的步骤以及状况
想要在add方法中刷新借阅数据,而不是每次都手动刷新
那么根据视频说的同样的方法 调用refresh 方法,
在BookLendViewCtrl.java中当前的是没有借阅数据界面的对象的
- 找到图书查询的界面:BookViewCtrl
private TableView<Lend> lendTableView; // 在图书查询界面上是没有这个成员变量的!!!
//因此我手动添加了
private TableView<Lend> lendTableView;
- 将成员变量从BookViewCtrl复制到在BookLendViewCtrl中,加上get,set方法
- 然后到add()方法中调用 lendTableView.refersh() 方法刷新,刷新图书查询界面中的数据
- 需要在查询界面中将这个变量传过去,
- 找到lend方法, 里面调用了 InitLendStage() 方法,点过去
- 进入 BookViewCtrl 中的initLendStage 方法
- 通过 controller传过去.调用 controller 中的set方法 controller.setBookTableView(bookTableView); 因为对 tableView 这个东西不理解是什么,但是,先直接模仿套用了
// 套用的代码
BookLendViewCtrl controller = (BookLendViewCtrl)loader.getController();
controller.setBookTableView(bookTableView);
controller.setLendTableView(lendTableView);
问题代码1:
public class BookLendViewCtrl {
private TableView<Book> bookTableView;
private TableView<Lend> lendTableView;
private void add() {
int userId =Integer.parseInt(userIdField.getText());
int bookId=Integer.parseInt(bookIdField.getText());
// 这里改的是界面的数据
book.setStatus(Constant.STATUS_LEND);
lendService.add(bookId,userId);
// 改完图书界面数据之后刷新
bookTableView.refresh();
// 借阅界面刷新
lendTableView.refresh(); // 这里报错空指针异常
stage.close();
}
lendTableView 和 bookTableView set get 方法都加上了!
}
图片1
运行结果:添加借阅数据时,点击提交并不会执行完成,界面将不在变动,重新打开可以看到数据添加进去了,但是页面刷新失败
在自己加的页面刷新的那行代码上出现空指针异常????
问题代码2
public class BookViewCtrl implements Initializable {
@FXML
private TableView<Book> bookTableView;
@FXML
private TableView<Lend> lendTableView; (这里 灰色:Private field 'lendTableView' is never assigned)
private void initLendStage(Book book) throws IOException {
BookLendViewCtrl controller = (BookLendViewCtrl)loader.getController();
controller.setBookTableView(bookTableView);
controller.setLendTableView(lendTableView);
}
}
图片2