用java gui写了一个小项目出现两个小问题。
1.在点击添加按钮添加信息后jdialog无法自动刷新jtable的数据,但是数据库显示已经添加成功。
2.点击修改按钮后无法出现修改界面jdialog,但是点击添加按钮并操作后,修改界面可以显示。
addempinfo界面
package mhl.view;
import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import mhl.model.EmpModel;
public class addEmpInfo extends JDialog implements ActionListener{
//添加组件
JPanel jp1, jp2,jp3;
JButton jb1,jb2;
JLabel jl1, jl2, jl3, jl4, jl5, jl6;
JTextField jtf1, jtf2, jtf3, jtf4, jtf5,jtf6;
public addEmpInfo(EmpInfo empInfo, String title, boolean model) {
//super(owner, title, modal);
//上
jl1 = new JLabel("学号");
jl2 = new JLabel("姓名");
jl3 = new JLabel("性别");
jl4 = new JLabel("年龄");
jtf1 = new JTextField();
jtf2 = new JTextField();
jtf3 = new JTextField();
jtf4 = new JTextField();
jb1 = new JButton("添加");
jb1.addActionListener(this);
jb2 = new JButton("取消");
jb2.addActionListener(this);
jp1 = new JPanel();
jp2 = new JPanel();
jp3 = new JPanel();
jp1.setLayout(new GridLayout(4,1));
jp2.setLayout(new GridLayout(4,1));
jp1.add(jl1);
jp1.add(jl2);
jp1.add(jl3);
jp1.add(jl4);
jp2.add(jtf1);
jp2.add(jtf2);
jp2.add(jtf3);
jp2.add(jtf4);
jp3.add(jb1);
jp3.add(jb2);
this.add(jp1,BorderLayout.WEST);
this.add(jp2,BorderLayout.CENTER);
this.add(jp3,BorderLayout.SOUTH);
this.setSize(400,300);
//this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getSource() == jb1) {
EmpModel em = new EmpModel();
String sql = "insert into rszl(empid,empname,sex,zw) values(?,?,?,?)";
String paras[] = {jtf1.getText(), jtf2.getText(), jtf3.getText(), jtf4.getText()};
if(!em.UpdateModel(sql, paras)) {
//提示
JOptionPane.showMessageDialog(this, "添加失败");
}
this.dispose();
}else if(e.getSource() == jb2) {
this.dispose();
}
}
}
empinfo界面
package mhl.view;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import mhl.model.EmpModel;
public class EmpInfo extends JPanel implements ActionListener{
JTable jtable;
JScrollPane jsp;
JPanel p1, p2, p3, p4, p5;
JLabel p1_lab1, p3_lab1;
JTextField p1_jtf1;
JButton p1_jb1, p4_jb1, p4_jb2, p4_jb3, p4_jb4;
EmpModel em = null;
public EmpInfo() {
//上
p1 = new JPanel(new FlowLayout(FlowLayout.CENTER));
p1_lab1 = new JLabel("请输入姓名(员工号或职位)");
p1_jtf1 = new JTextField(20);
p1_jb1 = new JButton("查询");
p1_jb1.addActionListener(this);
p1.add(p1_lab1);
p1.add(p1_jtf1);
p1.add(p1_jb1);
//中
EmpModel em = new EmpModel();
String paras[] = {"1"};
em.query("select empid,empname,sex,zw from rszl where 1 = ?", paras);
p2 = new JPanel(new BorderLayout());
jtable = new JTable(em);
jsp = new JScrollPane(jtable);
p2.add(jsp);
//下
p3 = new JPanel(new FlowLayout(FlowLayout.LEFT));
p3_lab1 = new JLabel("总记录是**条");
p3.add(p3_lab1);
p4 = new JPanel(new FlowLayout(FlowLayout.RIGHT));
p4_jb1 = new JButton("详细信息");
p4_jb1.addActionListener(this);
p4_jb2 = new JButton("添加");
p4_jb2.addActionListener(this);
p4_jb3 = new JButton("修改");
p4_jb3.addActionListener(this);
p4_jb4 = new JButton("删除");
p4_jb4.addActionListener(this);
p4.add(p4_jb1);
p4.add(p4_jb2);
p4.add(p4_jb3);
p4.add(p4_jb4);
p5 = new JPanel(new BorderLayout());
p5.add(p3,"West");
p5.add(p4,"East");
//设置整个布局为border
this.setLayout(new BorderLayout());
this.add(p1,"North");
this.add(p2,"Center");
this.add(p5,"South");
this.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getSource() == p1_jb1) {
System.out.println("用户希望查询");
//查询
String name = this.p1_jtf1.getText();
String sql = "select empid,empname,sex,zw from rszl where empname = ?";
String paras[] = {name};
em = new EmpModel();
em.query(sql, paras);
jtable.setModel(em);
}else if(e.getSource() == p4_jb1) {
}else if(e.getSource() == p4_jb2) {
addEmpInfo aei = new addEmpInfo(this,"sd",true);
//构建新的数据模型类,并更新
String sql = "select empid,empname,sex,zw from rszl where 1 = ?";
String paras[] = {"1"};
em = new EmpModel();
em.query(sql, paras);
jtable.setModel(em);
}else if(e.getSource() == p4_jb3) {
//用户希望修改
int rowNum = this.jtable.getSelectedRow();
if(rowNum == -1) {
JOptionPane.showMessageDialog(this, "请选择一行");
return;
}
System.out.println(rowNum);
//显示修改对话框
new UpdEmpInfo(this, "修改", true, em, rowNum);
}else if(e.getSource() == p4_jb4) {
int RowNum = this.jtable.getSelectedRow();
if(this.jtable.getSelectedRow() == -1) {
JOptionPane.showMessageDialog(this, "请选择一行");
return;
}
String empid = (String)this.jtable.getValueAt(RowNum, 0);
System.out.println("Id = " + empid);
String sql = "delete from rszl where empid = ?";
String paras[] = {empid};
em = new EmpModel();
em.UpdateModel(sql, paras);
em = new EmpModel();
String paras2[] = {"1"};
em.query("select empid,empname,sex,zw from rszl where 1 = ?", paras2);
jtable.setModel(em);
}
}
}
updempinfo界面
package mhl.view;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import mhl.model.EmpModel;
/**
* 修改
* @author wang
*
*/
public class UpdEmpInfo extends JDialog implements ActionListener{
//添加组件
JPanel jp1, jp2,jp3;
JButton jb1,jb2;
JLabel jl1, jl2, jl3, jl4, jl5, jl6;
JTextField jtf1, jtf2, jtf3, jtf4, jtf5,jtf6;
EmpModel em = null;
public UpdEmpInfo(EmpInfo empInfo, String title, boolean model, EmpModel em, int rowNum) {
//super();
//上
jl1 = new JLabel("学号");
jl2 = new JLabel("姓名");
jl3 = new JLabel("性别");
jl4 = new JLabel("年龄");
jtf1 = new JTextField();
//初始化
jtf1.setText(em.getValueAt(rowNum, 0).toString());
jtf1.setEditable(false);
jtf2 = new JTextField();
jtf2.setText( em.getValueAt(rowNum, 1).toString());
jtf3 = new JTextField();
jtf3.setText(em.getValueAt(rowNum, 2).toString());
jtf4 = new JTextField();
jtf4.setText(em.getValueAt(rowNum, 3).toString());
jb1 = new JButton("修改");
jb1.addActionListener(this);
jb2 = new JButton("取消");
jb2.addActionListener(this);
jp1 = new JPanel();
jp2 = new JPanel();
jp3 = new JPanel();
jp1.setLayout(new GridLayout(4,1));
jp2.setLayout(new GridLayout(4,1));
jp1.add(jl1);
jp1.add(jl2);
jp1.add(jl3);
jp1.add(jl4);
jp2.add(jtf1);
jp2.add(jtf2);
jp2.add(jtf3);
jp2.add(jtf4);
jp3.add(jb1);
jp3.add(jb2);
this.add(jp1,BorderLayout.WEST);
this.add(jp2,BorderLayout.CENTER);
this.add(jp3,BorderLayout.SOUTH);
this.setSize(400,300);
//this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
}
}
model层
package mhl.model;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.*;
import javax.swing.*;
import javax.swing.table.*;
import mhl.db.SqlHelper;
/**
* 这是人事的数据模型,完成对人事表的各种操作
* @author wang
*
*/
public class EmpModel extends AbstractTableModel{
Vector<String> colums;
Vector<Vector> rows;
public boolean UpdateModel(String sql,String paras[])
{
SqlHelper hp=new SqlHelper();
return hp.updateExecete(sql,paras);
}
//写一个方法,用于查询需要显示的人事信息
public void query(String sql, String paras[]) {
//初始化列
this.colums = new Vector<String>();
this.rows = new Vector<Vector>();
//创建一个sqlhelper
SqlHelper sh = new SqlHelper();
ResultSet rs = sh.query(sql, paras);
try {
//从rs对象中可以得到resultsetmetdata
//rsmt可以得到结果有多少个,且可以知道每列的名字
ResultSetMetaData rsmt = rs.getMetaData();
for(int i = 0; i < rsmt.getColumnCount(); i++) {
this.colums.add(rsmt.getColumnName(i+1));
}
//把re结果放入rows
while(rs.next()) {
Vector<String> temp = new Vector<String>();
for(int i = 0; i < rsmt.getColumnCount(); i++) {
temp.add(rs.getString(i+1));
}
rows.add(temp);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
sh.Close();
}
}
@Override
public int getRowCount() {
// TODO Auto-generated method stub
return this.rows.size();
}
@Override
public int getColumnCount() {
// TODO Auto-generated method stub
return this.colums.size();
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
// TODO Auto-generated method stub
return ((Vector)rows.get(rowIndex)).get(columnIndex);
}
@Override
public String getColumnName(int column) {
// TODO Auto-generated method stub
return this.colums.get(column).toString();
}
}