以下是我编写的一个GUI程序,程序中将访问数据库的结果显示在表格中。现在我想通过按纽事件修改数据库中的记录。点击某一个按钮时则弹出一新的窗口,而当其中的确定按纽被单击时则会关闭该窗口,同时一些输入的值以数组形式被返回,并且主窗口的设置发生改变。就象图中显示的那样,当点“OK”时则原有的设置发生改变。
程序代码如下:
Test.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
public class Test
{
public static void main(String[] args)
{
EnrollManager enrollManager=new EnrollManager();
enrollManager.init();
enrollManager.setSize(400,200);
enrollManager.show();
}
}
EnrollManager.java
import java.sql.*;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;
public class EnrollManager extends JFrame implements ActionListener
{
Container contentPane;
JLabel record;
JTable table = null;
DefaultTableModel defaultModel;
JScrollPane scrollPane;
JPanel buttonPanel;
public static JButton plus;
public static JButton delete;
public static JButton modify;
Connection con=null;
String query = "SELECT * FROM clients";
String insert="INSERT INTO clients(id,Logname,password,Email) VALUES(?,?,?,?)";
String url="jdbc:odbc:bookstore";
public static Statement stmt=null;
public static PreparedStatement pstmt=null;
public static ResultSet r=null;
public EnrollManager()
{
int id=-1;
String logName=null;
String password=null;
String email=null;
try
{
Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(java.lang.ClassNotFoundException e)
{
System.err.print("ClassNotFoundException: ");
System.err.println(e.getMessage());
}
contentPane =getContentPane();
contentPane.setSize(400,120);
setTitle("用户注册信息管理系统");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void init()
{
record=new JLabel("数据库中现有记录如下:",JLabel.CENTER);
String[] property={"id","logName","password","Email"};
String[][] dataRecord=new String[3][4];
defaultModel = new DefaultTableModel(dataRecord,property);
table = new JTable(defaultModel);
//获取表格的编辑器
TableCellEditor tableCellEditor=table.getDefaultEditor(String.class);
if (tableCellEditor!=null)
{
if (tableCellEditor instanceof DefaultCellEditor)
((DefaultCellEditor)tableCellEditor).setClickCountToStart(1);
} //设置表格的编辑行为
//设置表格视窗大小
table.setPreferredScrollableViewportSize(new Dimension(400,80));
table.setCellSelectionEnabled(true);
JScrollPane scrollPane = new JScrollPane(table);
try
{
con = DriverManager.getConnection (url);
stmt = con.createStatement();
pstmt= con.prepareStatement(insert);
r = stmt.executeQuery(query);
for(int i=0;r.next();i++)
{
String r1=Integer.toString(r.getInt("id"));
String r2=r.getString("Logname");
String r3=r.getString("password");
String r4=r.getString("Email");
//将数据库文件中的值显示在表格中
defaultModel.setValueAt(r1,i,0);
defaultModel.setValueAt(r2,i,1);
defaultModel.setValueAt(r3,i,2);
defaultModel.setValueAt(r4,i,3);
}
r.close();
}
catch (SQLException ex)
{
ex.printStackTrace();
}
catch(ArrayIndexOutOfBoundsException e){;}
buttonPanel=new JPanel();
plus =new JButton("增加记录");
delete =new JButton("删除记录");
modify =new JButton("修改记录");
plus.addActionListener(this);
delete.addActionListener(this);
modify.addActionListener(this);
buttonPanel.add(plus);
buttonPanel.add(delete);
buttonPanel.add(modify);
contentPane.setLayout(new BorderLayout());
contentPane.add(record, BorderLayout.NORTH);
contentPane.add(scrollPane, BorderLayout.CENTER);
contentPane.add(buttonPanel,BorderLayout.SOUTH);
}
public void actionPerformed(ActionEvent e)
{
String r1=null;
String r2=null;
String r3=null;
String r4=null;
if(e.getSource()==plus)
{
try
{
PlusPanel plusPanel=new PlusPanel();
plusPanel.setTitle("添加用户注册信息");
plusPanel.setSize(300,150);
plusPanel.setVisible(true);
for(;;)
{
if(plusPanel.isClicked())
{
String[] data=plusPanel.getRecord();
defaultModel.addRow(data);
//增加数据库中的记录
con = DriverManager.getConnection (url);
pstmt= con.prepareStatement(insert);
pstmt.setInt(1,4);
pstmt.setString(2,data[1]);
pstmt.setString(3,data[2]);
pstmt.setString(4,data[3]);
pstmt.executeUpdate();
break;
}
else {;}
}
}
catch (SQLException ex) {;}
}
/*if(e.getSource()==delete)
{
DeletePanel deletePanel=new DeletePanel();
deletePanel.setTitle("修改用户注册信息");
deletePanel.setSize(300,150);
deletePanel.setVisible(true);
int row=deletePanel.getRow();
defaultModel.removeRow(row);
try{stmt.executeUpdate("DELETE FROM clients WHERE id=row");}
catch (SQLException ex){;}
}
if(e.getSource()==modify)
{
ModifyPanel modifyPanel=new ModifyPanel();
modifyPanel.setSize(300,150);
modifyPanel.setVisible(true);
String[] record=modifyPanel.getRecord();
int i=Integer.parseInt(record[0]);
//for(defaultModel.getRowCount())//判断输入的ID是否存在于表中
for(int j=0;j<4;j++)
defaultModel.setValueAt(record[j],i,j);
}*/
}
}
PlusPanel.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
class PlusPanel extends JFrame implements ActionListener
{
private JLabel idLabel=new JLabel("用户ID:");
private JLabel logNameLabel=new JLabel("用户名:");
private JLabel passwordLabel=new JLabel("密码:");
private JLabel emailLabel=new JLabel("Email:");
public static boolean buttonClicked=false;
private JTextField idField=new JTextField(10);
private JTextField logNameField=new JTextField(10);
private JTextField passwordField=new JTextField(20);
private JTextField emailField=new JTextField(20);
private JButton sure=new JButton("确定");
public String[] record=new String[4];
Container contentPane;
public PlusPanel()
{
contentPane=getContentPane();
contentPane.setLayout(new FlowLayout());
contentPane.add(idLabel); contentPane.add(idField);
contentPane.add(logNameLabel); contentPane.add(logNameField);
contentPane.add(passwordLabel); contentPane.add(passwordField);
contentPane.add(emailLabel); contentPane.add(emailField);
contentPane.add(sure);
sure.addActionListener(this);
}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==sure)
{
buttonClicked=true;
record[0]=idField.getText();
record[1]=logNameField.getText();
record[2]=passwordField.getText();
record[3]=emailField.getText();
}
}
public boolean isClicked()
{
return buttonClicked;
}
public String[] getRecord()
{
return record;
}
}
知道如何实现这个功能的大虾帮个忙修改一下或者给一个提示,谢谢!
说明:附件是相关的数据库文件,数据源名为bookstore.