1.删除
a.获取选中的行
jta.getSelectedRow();
b.根据选中的行获取指定的列
jta.getValueAt(指定的行,指定的列);
c.根据获取的列的值 调用删除的方法即可。
2.修改
a.获取选中的行
jta.getSelectedRow();
b.根据选中的行获取指定的列
jta.getValueAt(指定的行,指定的列);
c.将获取的学号和当前主界面this对象作为参数传递到修改界面的构造函数中。
d.根据传递过来的学号 找到该学号的全部信息 并且设置到窗体中去
e. 为修改按钮设置点击事件 重新获取所有信息后 调用修改的方法即可。
3.代码流程
封装 自动刷新操作
/** * 专门编写一个方法来实现数据的绑定及主界面的数据显示 * */ public void myShowDate(List<Student> listStudents) { // 1.实例化StudentDao类对象 StudentDao sd = new StudentDao(); // 重新显示数据前将上一次显示的数据全部清空 // 1.获取表格中数据的所有行 int rowCount = jta.getRowCount();// 12 // 2.根据获取的行数 删除行 dtm.removeRow(0) for (int i = 0; i < rowCount; i++) { dtm.removeRow(0); } // 3.遍历集合 根据自己的表头来进行编写 for (Student student : listStudents) { Vector<Object> vc = new Vector<Object>(); vc.add(student.getSid()); vc.add(student.getSname()); vc.add(student.getSage()); vc.add(student.getSex()); vc.add(student.getSaddress()); dtm.addRow(vc); } }
StudentDao中方法 删除
public int deleteStudentBySid(int sid) { Connection conn = null; PreparedStatement ps = null; int n = 0; String sql = ""; try { conn = DBHelper.getConn(); sql = "delete from tb_student where sid = "+sid; ps = conn.prepareStatement(sql); n = ps.executeUpdate(); } catch (Exception e) { // TODO: handle exception }finally { //关闭数据库连接 DBHelper.myClose(conn, ps, null); } return n; }
拿到表头中id的方法 根据ID删除学生
按钮事件
// jbc删除 /** * 流程: 1.设置删除按钮的动作监听事件 2.在监听器中获取选中的行,如未选中则要提示说明 3.根据选中的行获取指定的列 4.调用删除的DAO方法即可 * 5.判断是否删除成功 6.调用自动刷新的方法 */ jbc.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // 获取选中的行 int row = jta.getSelectedRow(); if (row != -1) { // 是否确定删除 int isDel = JOptionPane.showConfirmDialog(null, "您确定要删除吗?"); if (isDel == 0) { // 根据选中的行获取指定的列 String id = jta.getValueAt(row, 0).toString(); int sid = Integer.valueOf(id); // 实例化StudendDao StudentDao sd = new StudentDao(); //调用Stuudentdao中的方法 根据id删除 需要 int n = sd.deleteStudentBySid(sid); if (n > 0) { JOptionPane.showMessageDialog(null, "删除成功"); // 立刻调用自动刷新的方法 刷新数据 myShowDate(sd.queryStudentAll()); } else { JOptionPane.showMessageDialog(null, "删除失败"); } } } else { JOptionPane.showMessageDialog(null, "请您选中行再次进行删除"); } } });
修改Dao方法
/** * 查找单个 * @param sid * @return */ public Student getStudentBySid(int sid) { Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; String sql = ""; Student student = null; try { //1.获取连接 conn = DBHelper.getConn(); //2.sql sql = "select * from tb_student where sid = "+sid; //3.传入方法 ps = conn.prepareStatement(sql); //4.返回结果集 rs = ps.executeQuery(); //5.遍历结果集 while(rs.next()) { student = new Student(rs.getInt("sid"), rs.getString("sname"), rs.getInt("sage"), rs.getString("ssex"), rs.getString("shobby"), rs.getString("saddress"), rs.getString("smenu")); } } catch (Exception e) { e.printStackTrace(); }finally { DBHelper.myClose(conn, ps, rs); } return student; } /** * 修改学生 * @param sid * @param student * @return */ public int editStudentBySid(int sid,Student student) { Connection conn = null; PreparedStatement ps = null; int n = 0; String sql = ""; try { conn = DBHelper.getConn(); sql = "update tb_student set sname = ? , sage = ? , ssex = ? , shobby = ? ,saddress = ? ,smenu = ? where sid = "+sid; ps = conn.prepareStatement(sql); ps.setString(1, student.getSname()); ps.setInt(2, student.getSage()); ps.setString(3, student.getSex()); ps.setString(4, student.getShobby()); ps.setString(5, student.getSaddress()); ps.setString(6, student.getSmenu()); n = ps.executeUpdate(); } catch (Exception e) { // TODO: handle exception }finally { DBHelper.myClose(conn, ps, null); } return n; }
根据ID修改学生信息 !!
编写按钮事件
/** * 修改 jbd 流程: 1.设置修改按钮的动作监听事件 2.在监听器中获取选中的行,如未选中则要提示说明 3.根据选中的行获取指定的列 * 4.new出修改界面将当前获取的id以及本类的this对象作为构造函数传递到修改界面 * 5.在修改界面拿到ID后进行查找单条信息,赋值到修改窗口中的每一个组件中 6.如果对于某些值要重新修改,清除后再修改 7.设置确认修改事件即可 */ jbd.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // 获取选中的行 int row = jta.getSelectedRow(); if (row != -1) { int isEdit = JOptionPane.showConfirmDialog(null, "您确定要进行修改操作吗?"); if (isEdit == 0) { // 根据选中的行获取指定的列 String id = jta.getValueAt(row, 0).toString(); int sid = Integer.valueOf(id); // new出新窗口(修改窗口) 需要2个参数 sid this //把获取到的sid 与本类传递过去 因为需要修改后实现自动刷新操作 new UpdateStudentUI(sid, MainPageUI.this); } } else { JOptionPane.showMessageDialog(null, "请选中行再进行修改操作"); } } });
进入修改页面 !!
根据方法显示原有信息
/** * 专门编写一个方法来实现将传递过来的sid进行查找 */ public void findStudentBySid(int sid) { // 根据参数sid获取该条信息的所有属性 Student student = new StudentDao().getStudentBySid(sid); // 将获取的student实体对象分别设置到指定的组件中即可显示信息 // 学号 jtfa_sid.setText(String.valueOf(student.getSid())); // 姓名 jtfa.setText(student.getSname()); // 年龄 jtfb.setText(String.valueOf(student.getSage())); // 性别 String ssex = student.getSex(); System.out.println(ssex); if ("男".equals(ssex)) { jrba.setSelected(true); } else if ("女".equals(ssex)) { jrbb.setSelected(true); } // 爱好 String shobby = student.getShobby(); // 判断撩汉子是否在shobby字符串中出现过 if (shobby.contains("撩汉子")) { jcba.setSelected(true); } if (shobby.contains("撩妹子")) { jcbb.setSelected(true); } if (shobby.contains("撩康康")) { jcbc.setSelected(true); } if (shobby.contains("锤康康")) { jcbd.setSelected(true); } // 地址 jcbaa.setSelectedItem(student.getSaddress()); // 备注 jta.setText(student.getSmenu()); }
修改界面所有代码
package com.zking.stumanager.ui; import java.awt.Color; import java.awt.Font; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.ButtonGroup; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; import com.zking.stumanager.dao.StudentDao; import com.zking.stumanager.entity.Student; /** * 修改界面 * * @author Zkingzz * */ public class UpdateStudentUI extends JFrame { /** * 1 */ // 上 private JPanel jpa = new JPanel(); private JLabel jla = new JLabel("修改学生"); // 中 private GridBagLayout gbl = new GridBagLayout(); private GridBagConstraints gbc = new GridBagConstraints(); private JPanel jpb = new JPanel(); private JLabel jla_sid = new JLabel("学号"); private JTextField jtfa_sid = new JTextField(15); private JLabel jlb = new JLabel("姓名"); private JTextField jtfa = new JTextField(15); private JLabel jlc = new JLabel("年龄"); private JTextField jtfb = new JTextField(15); private JLabel jld = new JLabel("性别"); private JRadioButton jrba = new JRadioButton("男"); private JRadioButton jrbb = new JRadioButton("女"); private ButtonGroup bg = new ButtonGroup(); private JLabel jle = new JLabel("爱好"); private JCheckBox jcba = new JCheckBox("撩汉子"); private JCheckBox jcbb = new JCheckBox("撩妹子"); private JCheckBox jcbc = new JCheckBox("撩康康"); private JCheckBox jcbd = new JCheckBox("锤康康"); private JLabel jlf = new JLabel("地址"); private JComboBox jcbaa = new JComboBox(); private JLabel jlg = new JLabel("备注"); private JTextArea jta = new JTextArea(8, 18); private JScrollPane jsp = new JScrollPane(jta); // 下 private JPanel jpc = new JPanel(); private JButton jba = new JButton("确认修改"); private JButton jbb = new JButton("清空"); private JButton jbc = new JButton("取消"); /** * 2.将指定的基础组件添加到指定的中间面板中 */ public void addControl() { // 上 jla.setFont(new Font("宋体", Font.BOLD, 30)); jla.setForeground(Color.blue); jpa.add(jla); // 中 jpb.setLayout(gbl); // 利用约束对象进行开始布局 // 学号 gbc.insets = new Insets(10, 10, 0, 0); gbc.gridx = 0; gbc.gridy = 0; gbl.setConstraints(jla_sid, gbc); jpb.add(jla_sid); jtfa_sid.setEditable(false);// 禁用 gbc.gridx = 1; gbc.gridy = 0; gbl.setConstraints(jtfa_sid, gbc); jpb.add(jtfa_sid); // 姓名 gbc.gridx = 0; gbc.gridy = 1; gbl.setConstraints(jlb, gbc); jpb.add(jlb); gbc.insets = new Insets(10, 10, 0, 0); gbc.gridx = 1; gbc.gridy = 1; gbl.setConstraints(jtfa, gbc); jpb.add(jtfa); // 年龄 gbc.gridx = 0; gbc.gridy = 2; gbl.setConstraints(jlc, gbc); jpb.add(jlc); gbc.insets = new Insets(10, 10, 0, 0); gbc.gridx = 1; gbc.gridy = 2; gbl.setConstraints(jtfb, gbc); jpb.add(jtfb); // 性别 // 分组 bg.add(jrba); bg.add(jrbb); gbc.gridx = 0; gbc.gridy = 3; gbl.setConstraints(jld, gbc); jpb.add(jld); gbc.insets = new Insets(10, -80, 0, 0); gbc.gridx = 1; gbc.gridy = 3; gbl.setConstraints(jrba, gbc); jpb.add(jrba); gbc.gridx = 2; gbc.gridy = 3; gbl.setConstraints(jrbb, gbc); jpb.add(jrbb); gbc.insets = new Insets(10, 10, 0, 0); // 爱好 gbc.gridx = 0; gbc.gridy = 4; gbl.setConstraints(jle, gbc); jpb.add(jle); gbc.insets = new Insets(10, -65, 0, 0); gbc.gridx = 1; gbc.gridy = 4; gbl.setConstraints(jcba, gbc); jpb.add(jcba); gbc.gridx = 2; gbc.gridy = 4; gbl.setConstraints(jcbb, gbc); jpb.add(jcbb); gbc.gridx = 1; gbc.gridy = 5; gbl.setConstraints(jcbc, gbc); jpb.add(jcbc); gbc.gridx = 2; gbc.gridy = 5; gbl.setConstraints(jcbd, gbc); jpb.add(jcbd); // 地址 gbc.insets = new Insets(10, 10, 0, 0); jcbaa.addItem("湖南省"); jcbaa.addItem("湖北省"); jcbaa.addItem("广东省"); jcbaa.addItem("广西省"); jcbaa.addItem("娄底省"); gbc.gridx = 0; gbc.gridy = 6; gbl.setConstraints(jlf, gbc); jpb.add(jlf); gbc.gridx = 1; gbc.gridy = 6; gbl.setConstraints(jcbaa, gbc); jpb.add(jcbaa); // 备注 gbc.gridx = 0; gbc.gridy = 7; gbl.setConstraints(jlg, gbc); jpb.add(jlg); gbc.gridx = 1; gbc.gridy = 7; gbl.setConstraints(jsp, gbc); jpb.add(jsp); // 下 jpc.add(jba); jpc.add(jbb); jpc.add(jbc); } /** * 专门编写一个方法来实现将传递过来的sid进行查找 */ public void findStudentBySid(int sid) { // 根据参数sid获取该条信息的所有属性 Student student = new StudentDao().getStudentBySid(sid); // 将获取的student实体对象分别设置到指定的组件中即可显示信息 // 学号 jtfa_sid.setText(String.valueOf(student.getSid())); // 姓名 jtfa.setText(student.getSname()); // 年龄 jtfb.setText(String.valueOf(student.getSage())); // 性别 String ssex = student.getSex(); System.out.println(ssex); if ("男".equals(ssex)) { jrba.setSelected(true); } else if ("女".equals(ssex)) { jrbb.setSelected(true); } // 爱好 String shobby = student.getShobby(); // 判断撩汉子是否在shobby字符串中出现过 if (shobby.contains("撩汉子")) { jcba.setSelected(true); } if (shobby.contains("撩妹子")) { jcbb.setSelected(true); } if (shobby.contains("撩康康")) { jcbc.setSelected(true); } if (shobby.contains("锤康康")) { jcbd.setSelected(true); } // 地址 jcbaa.setSelectedItem(student.getSaddress()); // 备注 jta.setText(student.getSmenu()); } // 声明一个空mp对象、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、 private MainPageUI mp = null; public UpdateStudentUI(int sid, MainPageUI mp) { System.out.println("sid是主界面传递过来,值为: " + sid); this.mp = mp; this.setTitle("新增"); this.setSize(450, 550); this.setDefaultCloseOperation(3); this.setLocationRelativeTo(null); addControl(); findStudentBySid(sid); /** * 3 */ // 上 this.getContentPane().add(jpa, "North"); // 中 this.getContentPane().add(jpb, "Center"); // 下 this.getContentPane().add(jpc, "South"); /** * 确认修改的点击事件 */ jba.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // 姓名 String sname = jtfa.getText(); // 年龄 int sage = Integer.valueOf(jtfb.getText()); // 性别 String sex = "";// 定义一个变量来存储最终选中的性别 if (jrba.isSelected()) {// 如果jrba男被选中 sex = "男"; } else if (jrbb.isSelected()) {// 如果jrbb女被选中 sex = "女"; } // System.out.println(sex); // 爱好 String shobby = "";// 定义一个变量来存储最终选中的爱好 if (jcba.isSelected()) { shobby += "撩汉子-"; } if (jcbb.isSelected()) { shobby += "撩妹子-"; } if (jcbc.isSelected()) { shobby += "撩康康-"; } if (jcbd.isSelected()) { shobby += "锤康康-"; } // System.out.println(shobby); shobby = shobby.substring(0, shobby.lastIndexOf('-')); // System.out.println(shobby); // 地址 String saddress = jcbaa.getSelectedItem().toString(); // 备注 String smenu = jta.getText(); // 封装 Student student = new Student(sname, sage, sex, shobby, saddress, smenu); // 实例化DAO StudentDao sd = new StudentDao(); int n = sd.editStudentBySid(sid, student); if (n > 0) { JOptionPane.showMessageDialog(null, "修改成功"); // 关闭新增窗口 UpdateStudentUI.this.dispose();// 新增成功后关闭当前新增界面 // 自动刷新 mp.myShowDate(sd.queryStudentAll()); } else { JOptionPane.showMessageDialog(null, "修改失败"); } } }); jbb.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { findStudentBySid(sid); } }); this.setVisible(true); } }