public class UserQueryBookView extends JInternalFrame{
/**
* 版本号
*/
private static final long serialVersionUID = 1L;
//可滚动的面板
private JScrollPane panel_table;
//父面板
private JPanel panel_parent;
//按钮模块
private JPanel panel_buttons;
//查询表
private JTable table;
private JLabel lb_type;
private JComboBox<String> cb_type;
private JButton btn_search;
private JButton btn_borrow;
private JButton btn_exit;
//建立属性依赖的
private BookBiz bookBiz=null;
private UsersBiz usersBiz=null;
//保存用户信息的属性
private Users user;
//用户临时存放图书编号
private int book_id;
/*初始化块*/
{
this.usersBiz=new UsersBizImpl();
this.bookBiz=new BookBizImpl();
init();//一定要调用初始化方法,否则一推空指针
}
public UserQueryBookView(Users user)
{
this.user=user;
}
public UserQueryBookView() {
}
/*初始化方法*/
private void init() {
table=new JTable();//这个地方实例化,供下面的panel_table调用
panel_parent=new JPanel(new BorderLayout());
panel_table=new JScrollPane(table);
//设置面板的大小和边框
panel_table.setBorder(BorderFactory.createTitledBorder
(BorderFactory.createRaisedBevelBorder(), "图书信息列表"));
//GridLayout类是一个布局管理器
panel_buttons=new JPanel(new GridLayout(7,1,0,30));
panel_buttons.setBorder(BorderFactory.createTitledBorder
(BorderFactory.createRaisedBevelBorder(),"查询条件"));
lb_type=new JLabel("查询类型:");
//设置下拉框,用数组添加数据
cb_type=new JComboBox<String>(new String[] {"查询全部图书",
"查询热门图书","查询可借图书","查询不可借图书"});
btn_search=new JButton("查询");
btn_borrow=new JButton("借书");
btn_exit=new JButton("退出窗口");
//给按钮注册监听器
registerActionListener();
//拼装
panel_parent.add(panel_table);
//panel_table.add(table);
panel_buttons.add(lb_type);
panel_buttons.add(cb_type);
panel_buttons.add(btn_search);
panel_buttons.add(btn_borrow);
panel_buttons.add(new JLabel());
panel_buttons.add(new JLabel());
panel_buttons.add(btn_exit);
//面板的添加位置
this.add(panel_table,BorderLayout.CENTER);
this.add(panel_buttons,BorderLayout.EAST);
//设置本窗体先关属性
this.setTitle("图书信息查询界面");
this.setIconifiable(true);
this.setClosable(true);//关闭窗口
this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
this.setSize(500, 500);
this.setVisible(true);
}
/*定义一个显示图书数据的数据模型*/
private class BookDateModel implements TableModel {
//显示什么数据
private List<Book> books_list=null;
//数据的set方法用于存入数据
public void setBooks_list(List<Book> books_list)
{
this.books_list=books_list;
}
/** 告诉表格控件,每一列对应的数据类型,统一字符串*/
@Override
public Class<?> getColumnClass(int columnIndex) {
//这个地方是String类型的
return String.class;
}
/**获取有多少列,一般是看数据库的字段多少个*/
@Override
public int getColumnCount() {
//因为book对象有四个属性,所以写死,显示四列
return 4;
}
/*告诉表格控件,需要显示多少行*/
@Override //select book_id,book_name,book_count,status from book,获取列名的方法
public String getColumnName(int columnIndex) {
System.out.println("columnIndex:"+columnIndex);
if(columnIndex==0)
{
return "图书编号";
}else if(columnIndex==1)
{
return "图书名称";
}else if(columnIndex==2)
{
return "借阅次数";
}else if(columnIndex==3)
{
return "是否可借";
}else
{
return "出错";
}
}
/*告诉表控件,显示多少列,有上面的数据库得到,通过构造方法*/
@Override
public int getRowCount() {
return books_list.size();
}
/**
* 根据行号,列好获取值
*/
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
//System.out.println("rowIndex:"+rowIndex+",columnIndex:"+columnIndex);
Book book=books_list.get(rowIndex);
if(columnIndex==0)
{
return book.getBook_id();
}else if(columnIndex==1)
{
return book.getBook_name();
}else if(columnIndex==2)
{
return book.getBook_count();
}else if(columnIndex==3)
{
return book.getStatus()==1?"可借":"不可借";
}else
{
return "出错";
}
}
@Override
public void addTableModelListener(TableModelListener l) {
// TODO Auto-generated method stub
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
// TODO Auto-generated method stub
return false;
}
@Override
public void removeTableModelListener(TableModelListener l) {
// TODO Auto-generated method stub
}
@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
// TODO Auto-generated method stub
}
}
/**
* 表格刷新方法
*/
private void refreshTable(List<Book> books)
{
//为什么要写这个刷新的方法呢?
//因为表格控件的数据会经常变化,所以定义一个刷新表格的方法
BookDateModel dm=new BookDateModel();
//给数据集合赋值,不然没有数据可以显示
dm.setBooks_list(books);
//现在把模型(含有数据的模型)交给Table的控件
table.setModel(dm);
}
/**查询按钮的封装方法*/
public void tableRegister() {
int index=cb_type.getSelectedIndex();//获取下拉框选项的索引,从0开始
List<Book> books=null;
//2.谁帮我们查 bookBiz
if(index==0)
{
//查询全部图书信息
books=bookBiz.queryAll();
}
if(index==1)
{
//查询热门图书信息
books=bookBiz.queryHotBooks();
}
if(index==2)
{
//查询可借图书信息
books=bookBiz.queryCanBorrowBooks();
}
if(index==3)
{
//查询不可借图书信息
books=bookBiz.queryNotCanBorrowBooks();
}
//这时候调用刷新方法,就是刷新表格控件,实现实时更新
refreshTable(books);
}
/**给所有按钮注册监听器*/
private void registerActionListener() {
//给查询按钮注册监听器
btn_search.addActionListener(new ActionListener() {
//重写方法 应用执行 e是动作事件
@Override
public void actionPerformed(ActionEvent e) {
//我们希望在table控件中显示我们查询到的数据
//1.我们查神什么 2.谁帮我们查 3.差了之后交给谁 4.怎么显示?
//1.我们查什么?
tableRegister();
}
});
//给table控件注册监听器
table.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e)
{
//获取用户选中图书的编号
int row_num=table.getSelectedRow();
//book_id是一个全局变量,用来临时存储数值
book_id=(int) table.getValueAt(row_num, 0);
System.out.println("book_id"+book_id);
//我们可以去借书
}
});
//给借书按钮注册监听器
btn_borrow.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("借书按钮book_id:"+book_id);
//这个地方获取不到getUser_id的值????? 问题解决:上一个页面必须传一个users对象类型过来
System.out.println("借书按钮user.getUser_id:"+user.getUser_id());
//判断书是否可借
if(book_id==0)
{
JOptionPane.showMessageDialog(UserQueryBookView.this,"请你选择要借的书");
return;
}
//1.获取用户选中的图书
//2.调用biz中的方法完成借阅功能
boolean tmp=usersBiz.borrowBook(user.getUser_id(),book_id);
if(tmp)
{
JOptionPane.showMessageDialog(UserQueryBookView.this,"借书成功");
tableRegister();
}else
{
JOptionPane.showMessageDialog(UserQueryBookView.this, "借书不成功");
}
}
});
btn_exit.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
//简单粗暴的直接退出程序 ,(不建议用) 注意点:任何非0的退出,都是非正常退出 例如 System.exit(1);
//System.exit(0);
//这种方式比较适合嵌入式窗口的退出 setVisible是设置可见或是不可见
UserQueryBookView.this.setVisible(false);
}
});
}
}
java 嵌入面板JInternalFrame的基本使用和数据的实时更新,及table数据模型的应用
最新推荐文章于 2024-06-17 09:24:11 发布