Jtable更新数据库mysql_通过JTable显示对学生表的增删改查

这个示例展示了如何使用Java Swing的JTable组件与MySQL数据库进行交互,实现学生信息的查询、添加、删除和修改功能。通过监听JTable事件,实现了对数据的实时修改,并在用户确认后更新数据库。

importjava.awt.BorderLayout;importjava.awt.event.FocusAdapter;importjava.awt.event.FocusEvent;importjava.awt.event.FocusListener;importjava.awt.event.MouseAdapter;importjava.awt.event.MouseEvent;importjava.sql.SQLException;importjava.util.ArrayList;importjava.util.List;importjava.util.Set;importjava.util.TreeSet;importjava.util.Vector;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JOptionPane;importjavax.swing.JPanel;importjavax.swing.JScrollPane;importjavax.swing.JTable;importjavax.swing.JTextField;importjavax.swing.ListSelectionModel;importjavax.swing.event.TableModelEvent;importjavax.swing.event.TableModelListener;importjavax.swing.table.DefaultTableModel;importjavax.swing.table.TableColumn;importpojo.Student;importpojo.StudentConstant;importservice.StudentService;importservice.impl.StudentServiceImpl;importutil.DataConversion;public class JTableTest extendsJFrame{private JPanel jp1=newJPanel();private JPanel jp2=newJPanel();private JPanel jp3=newJPanel();private JTable jt =null;private JButton select =new JButton("查询");private JButton delete =new JButton("删除");private JButton update =new JButton("确认修改");private JButton add =new JButton("增加");private JButton recover =new JButton("恢复");private JTextField jtf=new JTextField(20);private JScrollPane jsp=null;private DefaultTableModel dtm=null;private StudentService ss=newStudentServiceImpl();private List list=null;private Vector>vec1;private Vector vec2=null;private String st=null;//===========保存修改后的列名=====================

private Set li=null;publicJTableTest() {this.setTitle("学生表");this.setSize(500, 600);this.setLocationRelativeTo(null);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setResizable(false);

//============设置一个保存表头的Vector==========

vec2=new Vector();

vec2.add("学号");

vec2.add("编号");

vec2.add("姓名");

vec2.add("分数");

list=ss.selectStudentAll();

//

vec1=DataConversion.zhuanHuan(list);

//============为表模型设置数据和表头=============

dtm=newDefaultTableModel(vec1,vec2);

jt=newJTable(){

//===============设置数据是否可编辑================public boolean isCellEditable(int row, intcolumn) {

//==============姓名、分数可编辑==================if(column==StudentConstant.SNAME||column==StudentConstant.SCORE)return true;else

return false;

}

};

jt.setModel(dtm);

//===========设置表的点击方式为只可单选===============

jt.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

//================设置列不可移动=============

jt.getTableHeader().setReorderingAllowed(false);

//===============设置所以列不可调整大小===================

jt.getTableHeader().setResizingAllowed(false);//===============隐藏学号这一列因为学号不可被客户查看,但我们对数据的增删改查需要用到主键,所以隐藏===================

TableColumn tc=jt.getColumnModel().getColumn(0);

tc.setMaxWidth(0);

tc.setMinWidth(0);

tc.setPreferredWidth(0);

tc.setResizable(false);

li=new TreeSet();//===========查询==========================

select.addMouseListener(newMouseAdapter() {public voidmouseClicked(MouseEvent e) {

String sname=jtf.getText();

list=new ArrayList();

list=ss.selectStudentBySname(sname);

flush();

}

});//===============增加=====================

add.addMouseListener(newMouseAdapter() {public voidmouseClicked(MouseEvent e) {

//=============new一个新的增加窗口=============

AddJFrame ad=newAddJFrame();

//=============当主窗体获得焦点时刷新一下Jtable============

add.addFocusListener(newFocusAdapter() {public voidfocusGained(FocusEvent e) {

list=ss.selectStudentAll();

flush();

}

});

}

});//================删除=====================

delete.addMouseListener(newMouseAdapter() {public voidmouseClicked(MouseEvent e) {int i=jt.getSelectedRow();//=======判断是否选中不选中不弹窗口==============

if(i!=-1)

{

String s=(String) dtm.getValueAt(i, StudentConstant.SID);

//=================弹确认删除窗口==================================int t=JOptionPane.showConfirmDialog(JTableTest.this, "是否删除该数据");switch(t) {caseJOptionPane.YES_OPTION:

ss.deleteStudent(Integer.parseInt(s));

list=ss.selectStudentAll();

flush();

}

}

}

});//=================修改数据====================//==================获取修改前的数据===============

jt.addMouseListener(newMouseAdapter() {public voidmouseClicked(MouseEvent e) {int i=jt.getSelectedRow();int j=jt.getSelectedColumn();

st=(String) jt.getValueAt(i, j);

}

});

dtm.addTableModelListener(newTableModelListener() {public voidtableChanged(TableModelEvent e) {int i=jt.getSelectedRow();int j=jt.getSelectedColumn();

String s=(String) jt.getValueAt(i, j);

//=================判断修改后数据有没有发生改变===============if(e.getType()==TableModelEvent.UPDATE)

{if(st!=null&!st.equals(s))

{

//================改变后就加入set集合里,注意此处使用set集合重复修改的也只会提交一次可以提高性能=====================

li.add(i);

}

}

}

});//================确认修改============

update.addMouseListener(newMouseAdapter() {public voidmouseClicked(MouseEvent e) {int t=JOptionPane.showConfirmDialog(JTableTest.this, "你确认修改吗,修改后不可恢复");switch(t) {

//========================确认修改,在数据库中修改============================caseJOptionPane.YES_OPTION:for(Integer i : li) {

Student s=newStudent();

String ssid=(String) jt.getValueAt(i, StudentConstant.SID);int sid=Integer.parseInt(ssid);

String sname=(String) jt.getValueAt(i, StudentConstant.SNAME);int score=Integer.parseInt((String) jt.getValueAt(i, StudentConstant.SCORE));

s.setSid(sid);

s.setSname(sname);

s.setScore(score);

ss.upadteStudent(s);

}

list=ss.selectStudentAll();

flush();

}

}

});//===================恢复====================

recover.addMouseListener(newMouseAdapter() {public voidmouseClicked(MouseEvent e) {int t=JOptionPane.showConfirmDialog(JTableTest.this, "你确认恢复吗,只可以恢复到上一次确认修改后的位置");switch(t) {caseJOptionPane.YES_OPTION:

//==============确认修改之前只是在表上修改了数据没有对数据库进行操作,点击恢复只需要重新查询数据库刷新界面========================

list=ss.selectStudentAll();

flush();

}

}

});

jsp=newJScrollPane(jt);

jp1.add(jtf);

jp1.add(select);

jp2.add(jsp);

jp3.add(add);

jp3.add(delete);

jp3.add(recover);

jp3.add(update);this.getContentPane().add(jp1, BorderLayout.NORTH);this.getContentPane().add(jp2);this.getContentPane().add(jp3, BorderLayout.SOUTH);this.setVisible(true);

}private voidflush() {

//==============改变模型的数据====================

vec1=DataConversion.zhuanHuan(list);

dtm=newDefaultTableModel(vec1,vec2);

jt.setModel(dtm);

//======每次刷新的时候隐藏第一列=================

TableColumn tc=jt.getColumnModel().getColumn(0);

tc.setMaxWidth(0);

tc.setMinWidth(0);

tc.setPreferredWidth(0);

tc.setResizable(false);

}public static void main(String[] args) throwsSQLException {newJTableTest();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值