JAVA入门到精通-第72讲-学生管理系统4-model 2模式(1)

删除、查询、添加、修改:

-修改:

每个字段都可能修改:

//给?赋值

//在prepareStatement语句后面赋值才好用

//修改完了,更新数据

目前为止,已经完成了增删改查-Model1模式

最大特点:

界面和业务逻辑操作是放在一起的;

优点:简单,开发方便;


缺点:代码复用性不高;

中大型项目可读性差,可维护性不高;

前台后端混杂在一起的;

比如:“数据库密码换了,

所有涉及到数据库的地方都需要发生变化”

=================================

=================================

Model2模式:界面和操作分离

思想是最重要的;

数据库的操作全部交给StuModel处理;

对数据库的维护比较方便,比如数据库的密码,地址变化了,

就改动数据模型StuModel就可以了;


-简单的model2模式

界面(view)和模型(model/后台/业务逻辑层)

最大特点:界面和后台操作是分离的;

优点:代码复用性好、可读性高、可维护性好;

缺点:相对来说比较复杂;

//添加学生

默认是添加成功的

可以把数据库的地址、用户名、密码作为成员变量,

传参数进去,这样方便日后的修改;

以后更换数据库比较方便;

可以通过字符串数组String []paras 方式把参数传进来

i+1,传进来的参数是从0开始编号的;

//弹出消息框JOptionPane.showMessageDialog(this,"添加失败");

//关闭对话框

this.dispose();

---------------------

-删除,把增删改全部写在“添加学生”模块

-public boolean updStu

-修改

==============

-专门做一个函数,得到数据:

不要让构造函数和得到数据混在一起;


在不知道的情况下,对数据库进行了一次查询

[JTable_Test3.java]源码

/**
* 完成一个mini版本的学生管理系统(MODEL2模式)
* 1、查询任务
* 2、添加功能
*/
package com.student2;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Vector;
import javax.swing.*;
import javax.swing.table.AbstractTableModel;

public class JTable_Test3 extends JFrame implements ActionListener{
//定义组件
JPanel jp1,jp2;
JLabel jl1;
JButton jb1,jb2,jb3,jb4;
JTable jt;
JScrollPane jsp;
JTextField jtf;
StuModel sm;

public static void main(String[] args) {
try {
// 将当前窗体外观设置为所在操作系统的外观
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (UnsupportedLookAndFeelException e) {
e.printStackTrace();
}
new JTable_Test3();
}

//构造函数
public JTable_Test3(){
jp1=new JPanel();
jtf=new JTextField(10);
jb1=new JButton("查询");
jb1.addActionListener(this);
jl1=new JLabel("请输入名字");

//把各个空间加入列
jp1.add(jl1);
jp1.add(jtf);
jp1.add(jb1);
jp2=new JPanel();
jb2=new JButton("添加");
jb2.addActionListener(this);
jb3=new JButton("修改");
jb3.addActionListener(this);
jb4=new JButton("删除");
jb4.addActionListener(this);

//把各个按钮加入到jp2中
jp2.add(jb2);
jp2.add(jb3);
jp2.add(jb4);

//创建一个数据模型对象
sm=new StuModel();

//初始化JTable
jt=new JTable(sm);

//初始化jsp JScrollPane
jsp=new JScrollPane(jt);

//把jsp放入到jframe
this.add(jsp);
this.add(jp1,"North");
this.add(jp2,"South");

this.setSize(400, 300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}

public void actionPerformed(ActionEvent e) {
if(e.getSource()==jb1){
//因为把对表的数据封装到StuModel中,我们就可以比较简单的完成查询
String name=this.jtf.getText();
//写一个SQL语句
String sql="select * from stu where stuName=‘"+name+"‘";
//构建新的数据模型类,并更新
sm=new StuModel(sql);
//更新JTable
jt.setModel(sm);
}
//用户点击添加时
else if(e.getSource()==jb2){
StuAddDialog sa=new StuAddDialog(this, "添加学生", true);
//重新再获得新的数据模型
//构建新的数据模型类,并更新
sm=new StuModel();
//更新JTable
jt.setModel(sm);
}
//用户修改数据
else if(e.getSource()==jb3){
int rowNum=this.jt.getSelectedRow();
if(rowNum==-1){
//提示
JOptionPane.showMessageDialog(this, "请选择一行", "提示", JOptionPane.INFORMATION_MESSAGE);
return;
}

//显示修改对话框
new StuUpdDialog(this,"修改学生信息",true,sm,rowNum);

//更新数据模型
sm=new StuModel();
//更新JTable
jt.setModel(sm);
}

//用户点击删除时,删除一条选中的数据
else if(e.getSource()==jb4){
//1、得到学生的ID号
//getSelectedRow会返回用户点中的行
//如果该用户一行都没有选择,就会返回-1
int rowNum=this.jt.getSelectedRow();
if(rowNum==-1){
//提示
JOptionPane.showMessageDialog(this, "请选择一行", "提示", JOptionPane.INFORMATION_MESSAGE);
return;
}
//得到学生编号
String stuId=(String)sm.getValueAt(rowNum, 0);
//创建一个sql语句
String sql="delete from stu where stuid=?";
String []paras={stuId};
StuModel temp=new StuModel();
if(temp.updStu(sql, paras)){
JOptionPane.showMessageDialog(this,"删除数据成功","删除数据提示",JOptionPane.INFORMATION_MESSAGE);
}else{
JOptionPane.showMessageDialog(this,"删除数据失败","删除数据提示",JOptionPane.ERROR_MESSAGE);
}

//更新数据模型
sm=new StuModel();
//更新JTable
jt.setModel(sm);
}
}
}

156

156

1

/**

2

 * 完成一个mini版本的学生管理系统(MODEL2模式)

3

 * 1、查询任务

4

 * 2、添加功能

5

 */

6

package com.student2;

7

 

8

import java.awt.event.ActionEvent;

9

import java.awt.event.ActionListener;

10

import java.sql.Connection;

11

import java.sql.DriverManager;

12

import java.sql.PreparedStatement;

13

import java.sql.ResultSet;

14

import java.sql.SQLException;

15

import java.util.Vector;

16

import javax.swing.*;

17

import javax.swing.table.AbstractTableModel;

18

 

19

public class JTable_Test3 extends JFrame implements ActionListener{

20

    //定义组件

21

    JPanel jp1,jp2;

22

    JLabel jl1;

23

    JButton jb1,jb2,jb3,jb4;

24

    JTable jt;

25

    JScrollPane jsp;

26

    JTextField jtf;

27

    StuModel sm;

28

   

29

    public static void main(String[] args) {

30

        try {

31

            // 将当前窗体外观设置为所在操作系统的外观

32

            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

33

        } catch (ClassNotFoundException e) {

34

            e.printStackTrace();

35

        } catch (InstantiationException e) {

36

            e.printStackTrace();

37

        } catch (IllegalAccessException e) {

38

            e.printStackTrace();

39

        } catch (UnsupportedLookAndFeelException e) {

40

            e.printStackTrace();

41

        }

42

        new JTable_Test3();

43

    }

44

   

45

    //构造函数

46

    public JTable_Test3(){

47

        jp1=new JPanel();

48

        jtf=new JTextField(10);

49

        jb1=new JButton("查询");

50

        jb1.addActionListener(this);

51

        jl1=new JLabel("请输入名字");

52

       

53

        //把各个空间加入列

54

        jp1.add(jl1);

55

        jp1.add(jtf);

56

        jp1.add(jb1);

57

        jp2=new JPanel();

58

        jb2=new JButton("添加");

59

        jb2.addActionListener(this);

60

        jb3=new JButton("修改");

61

        jb3.addActionListener(this);

62

        jb4=new JButton("删除");

63

        jb4.addActionListener(this);

64

       

65

        //把各个按钮加入到jp2中

66

        jp2.add(jb2);

67

        jp2.add(jb3);

68

        jp2.add(jb4);

69

       

70

        //创建一个数据模型对象

71

        sm=new StuModel();

72

       

73

        //初始化JTable

74

        jt=new JTable(sm);

75

       

76

        //初始化jsp JScrollPane

77

        jsp=new JScrollPane(jt);

78

       

79

        //把jsp放入到jframe

80

        this.add(jsp);

81

        this.add(jp1,"North");

82

        this.add(jp2,"South");

83

       

84

        this.setSize(400, 300);

85

        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

86

        this.setVisible(true);

87

    }

88

 

89

    public void actionPerformed(ActionEvent e) {

90

        if(e.getSource()==jb1){

91

            //因为把对表的数据封装到StuModel中,我们就可以比较简单的完成查询

92

            String name=this.jtf.getText();

93

            //写一个SQL语句

94

            String sql="select * from stu where stuName=‘"+name+"‘";

95

            //构建新的数据模型类,并更新

96

            sm=new StuModel(sql);

97

            //更新JTable

98

            jt.setModel(sm);

99

        }

100

        //用户点击添加时

101

        else if(e.getSource()==jb2){

102

            StuAddDialog sa=new StuAddDialog(this, "添加学生", true);

103

            //重新再获得新的数据模型

104

            //构建新的数据模型类,并更新

105

            sm=new StuModel();

106

            //更新JTable

107

            jt.setModel(sm);

108

        }

109

        //用户修改数据

110

        else if(e.getSource()==jb3){

111

            int rowNum=this.jt.getSelectedRow();

112

            if(rowNum==-1){

113

                //提示

114

                JOptionPane.showMessageDialog(this, "请选择一行", "提示", JOptionPane.INFORMATION_MESSAGE);

115

                return;

116

            }

117

           

118

            //显示修改对话框

119

            new StuUpdDialog(this,"修改学生信息",true,sm,rowNum);

120

           

121

            //更新数据模型

122

            sm=new StuModel();

123

            //更新JTable

124

            jt.setModel(sm);

125

        }

126

       

127

        //用户点击删除时,删除一条选中的数据

128

        else if(e.getSource()==jb4){

129

            //1、得到学生的ID号

130

            //getSelectedRow会返回用户点中的行

131

            //如果该用户一行都没有选择,就会返回-1

132

            int rowNum=this.jt.getSelectedRow();

133

            if(rowNum==-1){

134

                //提示

135

                JOptionPane.showMessageDialog(this, "请选择一行", "提示", JOptionPane.INFORMATION_MESSAGE);

136

                return;

137

            }

138

            //得到学生编号

139

            String stuId=(String)sm.getValueAt(rowNum, 0);

140

            //创建一个sql语句

141

            String sql="delete from stu where stuid=?";

142

            String []paras={stuId};

143

            StuModel temp=new StuModel();

144

            if(temp.updStu(sql, paras)){

145

                JOptionPane.showMessageDialog(this,"删除数据成功","删除数据提示",JOptionPane.INFORMATION_MESSAGE);

146

            }else{

147

                JOptionPane.showMessageDialog(this,"删除数据失败","删除数据提示",JOptionPane.ERROR_MESSAGE);

148

            }

149

           

150

            //更新数据模型

151

            sm=new StuModel();

152

            //更新JTable

153

            jt.setModel(sm);

154

        }

155

    }

156

}

*******************************************************************[StuModel.java]源码

/**
* 这是一个stu表的模型
* 可以把对student表的各种操作封装到该模型中
*/
package com.student2;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Vector;
import javax.swing.JOptionPane;
import javax.swing.table.AbstractTableModel;

public class StuModel extends AbstractTableModel{
//rowData用来存放行数据、columnNames存放列名
Vector rowData,columnNames;
//定义操作数据库需要的组件
PreparedStatement ps=null;
Connection ct=null;
ResultSet rs=null;
String sqlDriver="com.microsoft.sqlserver.jdbc.SQLServerDriver";
String url="jdbc:sqlserver://127.0.0.1:1433;databaseName=stussystem;user=sa;password=sa;";

//添加学生(增、删、改)
public boolean updStu(String sql,String []paras){
boolean b=true;
try {
//1、加载驱动
Class.forName(sqlDriver);
//2、得到连接
ct=DriverManager.getConnection(url);
//3、创建ps
ps=ct.prepareStatement(sql);
//给ps的问号赋值
for(int i=0;i<paras.length;i++){
ps.setString(i+1, paras[i]);
}

//4、执行操作
if(ps.executeUpdate()!=1){
b=false;
}

} catch (Exception e) {
b=false;
JOptionPane.showMessageDialog(null, "数据源错误或数据库用户名、密码错误", "数据库连接错误提示", JOptionPane.ERROR_MESSAGE);
e.printStackTrace();
}finally{
try {
if(rs!=null){
rs.close();
}
if(ps!=null){
ps.close();
}
if(ct!=null){
ct.close();
}
} catch (SQLException e1) {
e1.printStackTrace();
}
}
return b;
}

public void init(String sql){
if(sql==""||sql.equals(null)){
sql="select * from stu";
}
//中间
columnNames=new Vector<>();
//设置列名
columnNames.add("学号");
columnNames.add("名字");
columnNames.add("性别");
columnNames.add("年龄");
columnNames.add("籍贯");
columnNames.add("系别");

rowData=new Vector<>();
//rowData可以存放多行
try {
//1、加载驱动
Class.forName(sqlDriver);
//2、得到连接
ct=DriverManager.getConnection(url);

ps=ct.prepareStatement(sql);
rs=ps.executeQuery();

while(rs.next()){
Vector hang=new Vector();
hang.add(rs.getString(1));
hang.add(rs.getString(2));
hang.add(rs.getString(3));
hang.add(rs.getInt(4));
hang.add(rs.getString(5));
hang.add(rs.getString(6));
//加入rowData
rowData.add(hang);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
if(rs!=null){
rs.close();
}
if(ps!=null){
ps.close();
}
if(ct!=null){
ct.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

//构造函数,用于初始我们的数据模型
public StuModel(String sql){
this.init(sql);
}

//构造函数
public StuModel(){
this.init("");
}

//得到共有多少列
public int getColumnCount() {
return this.columnNames.size();
}

public String getColumnName(int column) {
return (String)this.columnNames.get(column);
}

//得到共有多少行
public int getRowCount() {
return this.rowData.size();
}

//得到某行某列的数据
public Object getValueAt(int rowIndex, int columnIndex) {
return ((Vector)this.rowData.get(rowIndex)).get(columnIndex);
}
}

152

152

1

/**

2

 * 这是一个stu表的模型

3

 * 可以把对student表的各种操作封装到该模型中

4

 */

5

package com.student2;

6

 

7

import java.sql.Connection;

8

import java.sql.DriverManager;

9

import java.sql.PreparedStatement;

10

import java.sql.ResultSet;

11

import java.sql.SQLException;

12

import java.util.Vector;

13

import javax.swing.JOptionPane;

14

import javax.swing.table.AbstractTableModel;

15

 

16

public class StuModel extends AbstractTableModel{

17

    //rowData用来存放行数据、columnNames存放列名

18

    Vector rowData,columnNames;

19

    //定义操作数据库需要的组件

20

    PreparedStatement ps=null;

21

    Connection ct=null;

22

    ResultSet rs=null; 

23

    String sqlDriver="com.microsoft.sqlserver.jdbc.SQLServerDriver";

24

    String url="jdbc:sqlserver://127.0.0.1:1433;databaseName=stussystem;user=sa;password=sa;";

25

   

26

    //添加学生(增、删、改)

27

    public boolean updStu(String sql,String []paras){

28

        boolean b=true;

29

        try {

30

            //1、加载驱动

31

            Class.forName(sqlDriver);

32

            //2、得到连接

33

            ct=DriverManager.getConnection(url);

34

            //3、创建ps

35

            ps=ct.prepareStatement(sql);

36

            //给ps的问号赋值

37

            for(int i=0;i<paras.length;i++){

38

                ps.setString(i+1, paras[i]);

39

            }

40

           

41

            //4、执行操作

42

            if(ps.executeUpdate()!=1){

43

                b=false;

44

            }

45

           

46

        } catch (Exception e) {

47

            b=false;

48

            JOptionPane.showMessageDialog(null, "数据源错误或数据库用户名、密码错误", "数据库连接错误提示", JOptionPane.ERROR_MESSAGE);

49

            e.printStackTrace();

50

        }finally{

51

            try {

52

                if(rs!=null){

53

                    rs.close();

54

                }

55

                if(ps!=null){

56

                    ps.close();

57

                }

58

                if(ct!=null){

59

                    ct.close();

60

                }

61

            } catch (SQLException e1) {

62

                e1.printStackTrace();

63

            }

64

        }

65

        return b;

66

    }

67

   

68

    public void init(String sql){

69

        if(sql==""||sql.equals(null)){

70

            sql="select * from stu";

71

        }

72

        //中间

73

        columnNames=new Vector<>();

74

        //设置列名

75

        columnNames.add("学号");

76

        columnNames.add("名字");

77

        columnNames.add("性别");

78

        columnNames.add("年龄");

79

        columnNames.add("籍贯");

80

        columnNames.add("系别");

81

       

82

        rowData=new Vector<>();

83

        //rowData可以存放多行

84

        try {

85

            //1、加载驱动

86

            Class.forName(sqlDriver);

87

            //2、得到连接

88

            ct=DriverManager.getConnection(url);

89

           

90

            ps=ct.prepareStatement(sql);

91

            rs=ps.executeQuery();

92

           

93

            while(rs.next()){

94

                Vector hang=new Vector();

95

                hang.add(rs.getString(1));

96

                hang.add(rs.getString(2));

97

                hang.add(rs.getString(3));

98

                hang.add(rs.getInt(4));

99

                hang.add(rs.getString(5));

100

                hang.add(rs.getString(6));

101

                //加入rowData

102

                rowData.add(hang);

103

            }

104

        } catch (Exception e) {

105

            e.printStackTrace();

106

        }finally{

107

            try {

108

                if(rs!=null){

109

                    rs.close();

110

                }

111

                if(ps!=null){

112

                    ps.close();

113

                }

114

                if(ct!=null){

115

                    ct.close();

116

                }

117

            } catch (SQLException e) {

118

                // TODO Auto-generated catch block

119

                e.printStackTrace();

120

            }

121

        }

122

    }

123

   

124

    //构造函数,用于初始我们的数据模型

125

    public StuModel(String sql){

126

        this.init(sql);

127

    }

128

   

129

    //构造函数

130

    public StuModel(){

131

        this.init("");

132

    }

133

 

134

    //得到共有多少列

135

    public int getColumnCount() {

136

        return this.columnNames.size();

137

    }

138

   

139

    public String getColumnName(int column) {

140

        return (String)this.columnNames.get(column);

141

    }

142

 

143

    //得到共有多少行

144

    public int getRowCount() {

145

        return this.rowData.size();

146

    }

147

 

148

    //得到某行某列的数据

149

    public Object getValueAt(int rowIndex, int columnIndex) {

150

        return ((Vector)this.rowData.get(rowIndex)).get(columnIndex);

151

    }

152

}

*******************************************************************************

[StuAddDialog.java]源码

/**
* 添加数据
*/
package com.student2;

import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class StuAddDialog extends JDialog implements ActionListener{
//定义我需要的swing组件
JLabel jl1,jl2,jl3,jl4,jl5,jl6;
JButton jb1,jb2;
JTextField jtf1,jtf2,jtf3,jtf4,jtf5,jtf6;
JPanel jp1,jp2,jp3;

//owner它的父窗口;title窗口名;model指定是模态窗口,还是非模态
public StuAddDialog(Frame owner,String title,boolean modal){
super(owner,title,modal);//调用父类构造方法,达到模式对话框效果
jl1=new JLabel("学号");
jl2=new JLabel("名字");
jl3=new JLabel("性别");
jl4=new JLabel("年龄");
jl5=new JLabel("籍贯");
jl6=new JLabel("系别");

jtf1=new JTextField();
jtf2=new JTextField();
jtf3=new JTextField();
jtf4=new JTextField();
jtf5=new JTextField();
jtf6=new JTextField();

jb1=new JButton("添加");
jb2=new JButton("取消");

jp1=new JPanel();
jp2=new JPanel();
jp3=new JPanel();

//设置布局
jp1.setLayout(new GridLayout(6,1));
jp2.setLayout(new GridLayout(6,1));

//添加组件
jp1.add(jl1);
jp1.add(jl2);
jp1.add(jl3);
jp1.add(jl4);
jp1.add(jl5);
jp1.add(jl6);

jp2.add(jtf1);
jp2.add(jtf2);
jp2.add(jtf3);
jp2.add(jtf4);
jp2.add(jtf5);
jp2.add(jtf6);

jp3.add(jb1);
jp3.add(jb2);

this.add(jp1,BorderLayout.WEST);
this.add(jp2,BorderLayout.CENTER);
this.add(jp3,BorderLayout.SOUTH);
jb1.addActionListener(this);
jb2.addActionListener(this);

//展现
this.setSize(300, 250);
this.setVisible(true);
}

public void actionPerformed(ActionEvent e) {
//用户点击添加按钮后的响应动作
if(e.getSource()==jb1){
StuModel temp=new StuModel();
String sql="insert into stu values(?,?,?,?,?,?)";
String []paras={jtf1.getText(),jtf2.getText(),jtf3.getText(),jtf4.getText(),jtf5.getText(),jtf6.getText()};
if(!temp.updStu(sql, paras)){
JOptionPane.showMessageDialog(this, "添加数据失败", "添加数据提示", JOptionPane.ERROR_MESSAGE);
}else{
JOptionPane.showMessageDialog(this,"添加数据成功","添加数据提示",JOptionPane.INFORMATION_MESSAGE);
}
//关闭对话框
this.dispose();
}
else if(e.getSource()==jb2){
this.dispose();
}
}
}

106

106

1

/**

2

 * 添加数据

3

 */

4

package com.student2;

5

 

6

import java.awt.BorderLayout;

7

import java.awt.Frame;

8

import java.awt.GridLayout;

9

import java.awt.event.ActionEvent;

10

import java.awt.event.ActionListener;

11

import java.sql.Connection;

12

import java.sql.DriverManager;

13

import java.sql.PreparedStatement;

14

import java.sql.ResultSet;

15

import java.sql.SQLException;

16

import java.sql.Statement;

17

import javax.swing.JButton;

18

import javax.swing.JDialog;

19

import javax.swing.JLabel;

20

import javax.swing.JOptionPane;

21

import javax.swing.JPanel;

22

import javax.swing.JTextField;

23

 

24

public class StuAddDialog extends JDialog implements ActionListener{

25

    //定义我需要的swing组件

26

    JLabel jl1,jl2,jl3,jl4,jl5,jl6;

27

    JButton jb1,jb2;

28

    JTextField jtf1,jtf2,jtf3,jtf4,jtf5,jtf6;

29

    JPanel jp1,jp2,jp3;

30

   

31

    //owner它的父窗口;title窗口名;model指定是模态窗口,还是非模态

32

    public StuAddDialog(Frame owner,String title,boolean modal){

33

        super(owner,title,modal);//调用父类构造方法,达到模式对话框效果

34

        jl1=new JLabel("学号");

35

        jl2=new JLabel("名字");

36

        jl3=new JLabel("性别");

37

        jl4=new JLabel("年龄");

38

        jl5=new JLabel("籍贯");

39

        jl6=new JLabel("系别");

40

       

41

        jtf1=new JTextField();

42

        jtf2=new JTextField();

43

        jtf3=new JTextField();

44

        jtf4=new JTextField();

45

        jtf5=new JTextField();

46

        jtf6=new JTextField();

47

       

48

        jb1=new JButton("添加");

49

        jb2=new JButton("取消");

50

       

51

        jp1=new JPanel();

52

        jp2=new JPanel();

53

        jp3=new JPanel();

54

       

55

        //设置布局

56

        jp1.setLayout(new GridLayout(6,1));

57

        jp2.setLayout(new GridLayout(6,1));

58

       

59

        //添加组件

60

        jp1.add(jl1);

61

        jp1.add(jl2);

62

        jp1.add(jl3);

63

        jp1.add(jl4);

64

        jp1.add(jl5);

65

        jp1.add(jl6);

66

       

67

        jp2.add(jtf1);

68

        jp2.add(jtf2);

69

        jp2.add(jtf3);

70

        jp2.add(jtf4);

71

        jp2.add(jtf5);

72

        jp2.add(jtf6);

73

       

74

        jp3.add(jb1);

75

        jp3.add(jb2);

76

       

77

        this.add(jp1,BorderLayout.WEST);

78

        this.add(jp2,BorderLayout.CENTER);

79

        this.add(jp3,BorderLayout.SOUTH);

80

        jb1.addActionListener(this);

81

        jb2.addActionListener(this);

82

       

83

        //展现

84

        this.setSize(300, 250);

85

        this.setVisible(true);

86

    }

87

 

88

    public void actionPerformed(ActionEvent e) {

89

        //用户点击添加按钮后的响应动作

90

        if(e.getSource()==jb1){

91

            StuModel temp=new StuModel();

92

            String sql="insert into stu values(?,?,?,?,?,?)";

93

            String []paras={jtf1.getText(),jtf2.getText(),jtf3.getText(),jtf4.getText(),jtf5.getText(),jtf6.getText()};

94

            if(!temp.updStu(sql, paras)){

95

                JOptionPane.showMessageDialog(this, "添加数据失败", "添加数据提示", JOptionPane.ERROR_MESSAGE);

96

            }else{

97

                JOptionPane.showMessageDialog(this,"添加数据成功","添加数据提示",JOptionPane.INFORMATION_MESSAGE);

98

            }

99

            //关闭对话框

100

            this.dispose();

101

        }

102

        else if(e.getSource()==jb2){

103

            this.dispose();

104

        }

105

    }

106

}

******************************************************************

[StuUpdDialog.java]源码

/**
* 修改学生信息
*/
package com.student2;

import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class StuUpdDialog extends JDialog implements ActionListener{
//定义我需要的swing组件
JLabel jl1,jl2,jl3,jl4,jl5,jl6;
JButton jb1,jb2;
JTextField jtf1,jtf2,jtf3,jtf4,jtf5,jtf6;
JPanel jp1,jp2,jp3;

//owner它的父窗口;title窗口名;model指定是模态窗口,还是非模态
public StuUpdDialog(Frame owner,String title,boolean modal,StuModel sm,int rowNum){
super(owner,title,modal);//调用父类构造方法,达到模式对话框效果
jl1=new JLabel("学号");
jl2=new JLabel("名字");
jl3=new JLabel("性别");
jl4=new JLabel("年龄");
jl5=new JLabel("籍贯");
jl6=new JLabel("系别");

jtf1=new JTextField();
//初始化数据
jtf1.setText((String)sm.getValueAt(rowNum, 0));
//让jtf1不能修改
jtf1.setEditable(false);
jtf2=new JTextField();
jtf2.setText((String)sm.getValueAt(rowNum, 1));
jtf3=new JTextField();
jtf3.setText((String)sm.getValueAt(rowNum, 2));
jtf4=new JTextField();
jtf4.setText(sm.getValueAt(rowNum, 3).toString());
jtf5=new JTextField();
jtf5.setText((String)sm.getValueAt(rowNum, 4));
jtf6=new JTextField();
jtf6.setText((String)sm.getValueAt(rowNum, 5));

jb1=new JButton("修改");
jb2=new JButton("取消");

jp1=new JPanel();
jp2=new JPanel();
jp3=new JPanel();

//设置布局
jp1.setLayout(new GridLayout(6,1));
jp2.setLayout(new GridLayout(6,1));

//添加组件
jp1.add(jl1);
jp1.add(jl2);
jp1.add(jl3);
jp1.add(jl4);
jp1.add(jl5);
jp1.add(jl6);

jp2.add(jtf1);
jp2.add(jtf2);
jp2.add(jtf3);
jp2.add(jtf4);
jp2.add(jtf5);
jp2.add(jtf6);

jp3.add(jb1);
jp3.add(jb2);

this.add(jp1,BorderLayout.WEST);
this.add(jp2,BorderLayout.CENTER);
this.add(jp3,BorderLayout.SOUTH);

jb1.addActionListener(this);
jb2.addActionListener(this);

//展现
this.setSize(300, 250);
this.setVisible(true);
}

@Override
public void actionPerformed(ActionEvent e) {
//用户点击添加按钮后的响应动作
if(e.getSource()==jb1){
//做一个sql语句
String sql="update stu set stuName=?,stuSex=?,stuAge=?,stuJg=?,stuDept=? where stuId=?";
String []paras={jtf2.getText(),jtf3.getText(),jtf4.getText(),jtf5.getText(),jtf6.getText(),jtf1.getText()};
StuModel temp=new StuModel();
if(temp.updStu(sql, paras)){
JOptionPane.showMessageDialog(this,"修改数据成功","修改数据提示",JOptionPane.INFORMATION_MESSAGE);
}else{
JOptionPane.showMessageDialog(this,"修改数据失败","修改数据提示",JOptionPane.ERROR_MESSAGE);
}
this.dispose();
}
else if(e.getSource()==jb2){
this.dispose();
}
}
}

x

118

1

/**

2

 * 修改学生信息

3

 */

4

package com.student2;

5

 

6

import java.awt.BorderLayout;

7

import java.awt.Frame;

8

import java.awt.GridLayout;

9

import java.awt.event.ActionEvent;

10

import java.awt.event.ActionListener;

11

import java.sql.Connection;

12

import java.sql.DriverManager;

13

import java.sql.PreparedStatement;

14

import java.sql.ResultSet;

15

import java.sql.SQLException;

16

import java.sql.Statement;

17

import javax.swing.JButton;

18

import javax.swing.JDialog;

19

import javax.swing.JLabel;

20

import javax.swing.JOptionPane;

21

import javax.swing.JPanel;

22

import javax.swing.JTextField;

23

 

24

public class StuUpdDialog extends JDialog implements ActionListener{

25

    //定义我需要的swing组件

26

    JLabel jl1,jl2,jl3,jl4,jl5,jl6;

27

    JButton jb1,jb2;

28

    JTextField jtf1,jtf2,jtf3,jtf4,jtf5,jtf6;

29

    JPanel jp1,jp2,jp3;

30

   

31

    //owner它的父窗口;title窗口名;model指定是模态窗口,还是非模态

32

    public StuUpdDialog(Frame owner,String title,boolean modal,StuModel sm,int rowNum){

33

        super(owner,title,modal);//调用父类构造方法,达到模式对话框效果

34

        jl1=new JLabel("学号");

35

        jl2=new JLabel("名字");

36

        jl3=new JLabel("性别");

37

        jl4=new JLabel("年龄");

38

        jl5=new JLabel("籍贯");

39

        jl6=new JLabel("系别");

40

       

41

        jtf1=new JTextField();

42

        //初始化数据

43

        jtf1.setText((String)sm.getValueAt(rowNum, 0));

44

        //让jtf1不能修改

45

        jtf1.setEditable(false);

46

        jtf2=new JTextField();

47

        jtf2.setText((String)sm.getValueAt(rowNum, 1));

48

        jtf3=new JTextField();

49

        jtf3.setText((String)sm.getValueAt(rowNum, 2));

50

        jtf4=new JTextField();

51

        jtf4.setText(sm.getValueAt(rowNum, 3).toString());

52

        jtf5=new JTextField();

53

        jtf5.setText((String)sm.getValueAt(rowNum, 4));

54

        jtf6=new JTextField();

55

        jtf6.setText((String)sm.getValueAt(rowNum, 5));

56

       

57

        jb1=new JButton("修改");

58

        jb2=new JButton("取消");

59

       

60

        jp1=new JPanel();

61

        jp2=new JPanel();

62

        jp3=new JPanel();

63

       

64

        //设置布局

65

        jp1.setLayout(new GridLayout(6,1));

66

        jp2.setLayout(new GridLayout(6,1));

67

       

68

        //添加组件

69

        jp1.add(jl1);

70

        jp1.add(jl2);

71

        jp1.add(jl3);

72

        jp1.add(jl4);

73

        jp1.add(jl5);

74

        jp1.add(jl6);

75

       

76

        jp2.add(jtf1);

77

        jp2.add(jtf2);

78

        jp2.add(jtf3);

79

        jp2.add(jtf4);

80

        jp2.add(jtf5);

81

        jp2.add(jtf6);

82

       

83

        jp3.add(jb1);

84

        jp3.add(jb2);

85

       

86

        this.add(jp1,BorderLayout.WEST);

87

        this.add(jp2,BorderLayout.CENTER);

88

        this.add(jp3,BorderLayout.SOUTH);

89

       

90

        jb1.addActionListener(this);

91

        jb2.addActionListener(this);

92

       

93

        //展现

94

        this.setSize(300, 250);

95

        this.setVisible(true);

96

    }

97

 

98

    @Override

99

    public void actionPerformed(ActionEvent e) {

100

        //用户点击添加按钮后的响应动作

101

        if(e.getSource()==jb1){

102

            //做一个sql语句

103

            String sql="update stu set stuName=?,stuSex=?,stuAge=?,stuJg=?,stuDept=? where stuId=?";

104

            String []paras={jtf2.getText(),jtf3.getText(),jtf4.getText(),jtf5.getText(),jtf6.getText(),jtf1.getText()};

105

            StuModel temp=new StuModel();

106

            if(temp.updStu(sql, paras)){

107

                JOptionPane.showMessageDialog(this,"修改数据成功","修改数据提示",JOptionPane.INFORMATION_MESSAGE);

108

            }else{

109

                JOptionPane.showMessageDialog(this,"修改数据失败","修改数据提示",JOptionPane.ERROR_MESSAGE);

110

            }

111

            this.dispose();

112

        }

113

        else if(e.getSource()==jb2){

114

            this.dispose();

115

        }

116

    }

117

}

118


来自为知笔记(Wiz)

原文地址:https://www.cnblogs.com/xuxaut-558/p/10045818.html

时间: 2024-08-02 00:57:15

JAVA入门到精通-第72讲-学生管理系统4-model 2模式(1)的相关文章

JAVA入门到精通-第70讲-学生管理系统2-增删改

-完成一个mini版本学生管理系统 jude软件:很好使的,安装一下就可以用了: -学生管理系统的添加 .修改.删除.上下页分页 ---------------------------------------------- 上面是一个流布局,JPanel 下面是一个流布局,JPanel 中间是Border布局,边界布局,CENTER JTextField jtf; 先加JLable--->Jtf文本域->JButton按钮 ------------------------- mis 系统:信息

JAVA入门到精通-第94讲-山寨QQ项目8-好友在线提示

遇到的问题: 现在每登录一个人,后面的人是能看到前面的登录的人的: 但是,前面的人看不到后面的人登录: //后面每登录一个人,有责任去通知前面登录的人他已经上线了: 通知了完以后,需要更改好友在线的情况: //不让同一个账号反复登录 //如果 好友不在线,则不能聊天 ================================ [ManageQqChat.java] /** * 这是一个管理用户聊天界面的类 */ package com.qq.client.tools; import jav

JAVA入门到精通-第33讲-绘图技术.坦克大战1

    用的是Access数据库,安全性不够好,性能也不够强大:   躲在这里,坦克很少过来,做了一个随机数: 把得分的记录保存在数据库里面: SQLServer2005中型数据库:    (x,y)坐标:     800x600:     表示计算机屏幕上的每一行由800个点组成,共有600行:   共有480000个像素:   java绘图技术:   绘图一般在JPane上画: 覆盖JPanel的paintat方法 Graphics是一个图形画笔类,绘图的重要类,可以理解为一只画笔 supe

JAVA入门到精通-第32讲-swing编程实战

 JBorderLayout,左边是JList,拆分窗格: 图片是放在JLabel上的,图片的地址写好就行:  在相关项目下面建立一个文件夹Folder,放置图片:或者复制粘贴:   拆分:水平拆分?垂直拆分?    拆分之后把jList和jl1这两个组件放进去: 可以伸缩:  在窗口左上角出现自己的图标? Border布局: 多行文本框带滚动条,聊天窗口可滚动:   加入QQ左上角图标:      转成图片,getImage; Border布局很有用, CENTER会被自动挤满:  QQ号码.

JAVA入门到精通-第36讲-事件监听-坦克大战4

Java事件处理机制:  事件源:事件:事件监听者:事件处理方法:  任何一个类,只要实现了相应的接口,就可以去监听某个事件源: 一个类要实现监听的基本步骤:  a.实现相应的接口[KeyListener,MouseListener,ActionListener,WindowListener] b.把接口的处理方法根据需要重新编写(override) c.在事件源注册监听 d.事件传递是靠事件对象 通过ActionEvent传递事件: 通过事件进行委派事件模型进行事件处理:  一个事件源可能会生

JAVA入门到精通-第35讲-事件处理-坦克大战3

画出弧形: g.drawArc: 前两个参数:代表中心点,后面代表宽,高,后面是弧度的大小:  50代表弧度,后面方向:    SWING编程三个部分: (1)组件和布局管理器: (2)绘图技术: (3)事件处理机制:  鼠标,键盘按下的某个按钮或者移动等都是事件: JAVA认为,消息是一种事件对象:事件监听者也是一个类: 事件监听者中有函数或者方法专门去处理事件: import  java.awt.Event.*; 需要对事件进行处理,把Event包带进去:  Border布局中间是 默认的:

JAVA入门到精通-第31讲-常见组件

面板组件-Jpanel  一个JFrame,多个JPanel: JPanel默认是流布局:FlowLayout:  通过JPanel达到复杂布局的目的:  可以认为是网格布局,有3个JPanel:2个Label:2个按钮: 一个密码框和一个文本输入框:   最终展现出来的还是靠JFrame展现的  网格布局好点,3个JPanel,用流布局,控件往里加: ButtonGroup按钮组:一组里面只能选择一个:    对单选框管理,就是把它加入到ButtonGroup里面: 单选框也是一个个放进JPa

JAVA入门到精通-第46讲-IO编程.记事本开发

IO编程-记事本开发 fis.read(bytes) 字节数组: 通过fis把文件里面的1800个字符,尽可能的读, 最多读1024个.记录一下,0-1024记录到bytes; 再去读的首,fis.read试图1024个字节,不够了, 第二次读了776个,n=776:(0,776): 第三次,又准备读1024,这次一个读不到,返回-1: 退出循环: JMenuBar 菜单条是一个JMenuBar: JMenu File是一个JMenu; JMenuItem 下面这些选项是JMenuItem; 一

JAVA入门到精通-第92讲-山寨QQ项目6-多对多的聊天

QQ聊天项目演示-多对多的聊天 流同时并发的异常: 服务器中转 2/3号只有一个连接: 接收信息:while循环不停地读取: 当1号点开两个窗口时,2/3会共同去争取这个socket: 会出现流同时并发异常: Socket处理成static不太合理: 启动一个窗口就会占据Socket不放: ------------- -实现真正的多人聊天,互相不出现错误 -每一个登录的账号独享一份socket -去掉static 当一个链接达成的时候, 启动线程, 和服务器保持通讯的状态: 做一个类来管理客户端