1、修改窗口
2、在StudentDao中增加根據姓名查找的方法
public List<Student> getStudent(String name)throws SQLException{ DbUtil dbUtil = new DbUtil(); String sql="select * from tb_student where name LIKE '"+name+"%'"; System.out.println(sql); List<Student> list = new ArrayList<Student>(); ResultSet rs=dbUtil.executeQuery(sql); while(rs.next()){ Student student = new Student(); student.setId(rs.getInt("id")); student.setName(rs.getString("name")); student.setSex(rs.getString("sex")); student.setSno(rs.getString("sno")); student.setClassName(rs.getString("classname")); list.add(student); } return list; }
3、在StudentService中增加服務
/** * 根據姓名模糊查找 * @param name * @return * @throws SQLException */ public List<Student> getStudent(String name) throws SQLException { StudentDao studentDao = new StudentDao(); return studentDao.getStudent(name); }
4、將窗口和服務綁定
(1)將表格數據裝載分離出來
fillTable方法
public void fillTable(List<Student> list) { // 將默認的加載數據去掉,重新定義個表頭 String[] head = new String[] { "序號", "學號", "姓名", "性別", "班級" }; // 創建一個二維數組,5表示列數 Object[][] data = new Object[list.size()][5]; // 遍歷 for (int i = 0; i < list.size(); i++) { data[i][0] = list.get(i).getId(); data[i][1] = list.get(i).getSno(); data[i][2] = list.get(i).getName(); data[i][3] = list.get(i).getSex(); data[i][4] = list.get(i).getClassName(); } // 將數據和表頭封裝 DefaultTableModel datamoModel = new DefaultTableModel(data, head); // 將封裝好的數據加載 table.setModel(datamoModel); }
修改后的完整代碼
package com.student.view; import java.awt.EventQueue; import java.sql.SQLException; import java.util.List; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.border.EmptyBorder; import javax.swing.table.DefaultTableModel; import com.student.model.Student; import com.student.service.StudentService; import javax.swing.JLabel; import javax.swing.JTextField; import javax.swing.JButton; /* * 項目名稱: * * 文件名稱為:ShowStudent.java * 文件創建人:daxiang * * @author daxiang * @version * @time 2018年6月22日 上午8:03:24 * @copyright daxiang */ public class ShowStudent extends JFrame { private static final long serialVersionUID = 1L; private JPanel contentPane; private JTable table; private JTextField textField; /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { ShowTable frame = new ShowTable(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame. */ public ShowStudent() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 724, 481); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); // 設置無布局 contentPane.setLayout(null); // 創建滾動面板 JScrollPane scrollPane = new JScrollPane(); scrollPane.setBounds(27, 74, 603, 221); contentPane.add(scrollPane); // 創建表格 table = new JTable(); // 將表格加載到滾動面板 scrollPane.setViewportView(table); try { // 創建服務 StudentService service = new StudentService(); // 查詢出所有學生 List<Student> list = service.getStudent(); // 裝載數據 fillTable(list); JLabel label = new JLabel("請輸入學生姓名"); label.setBounds(53, 43, 123, 18); contentPane.add(label);
textField = new JTextField(); textField.setBounds(190, 40, 169, 24); contentPane.add(textField); textField.setColumns(10);
JButton button = new JButton("查 找"); button.setBounds(394, 39, 113, 27); contentPane.add(button); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }
setVisible(true); } /** * 表格裝載數據 * * @param list */ public void fillTable(List<Student> list) { // 將默認的加載數據去掉,重新定義個表頭 String[] head = new String[] { "序號", "學號", "姓名", "性別", "班級" }; // 創建一個二維數組,5表示列數 Object[][] data = new Object[list.size()][5]; // 遍歷 for (int i = 0; i < list.size(); i++) { data[i][0] = list.get(i).getId(); data[i][1] = list.get(i).getSno(); data[i][2] = list.get(i).getName(); data[i][3] = list.get(i).getSex(); data[i][4] = list.get(i).getClassName(); } // 將數據和表頭封裝 DefaultTableModel datamoModel = new DefaultTableModel(data, head); // 將封裝好的數據加載 table.setModel(datamoModel); } }
(2)具體實現
按鈕操作代碼
button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { try { //獲取查詢數據 //textField.getText().trim()獲取文本框數據並且去掉空格 List<Student> list1=service.getStudent(textField.getText().trim()); //裝載到表格 fillTable(list1); } catch (SQLException e1) { e1.printStackTrace(); } } });