昨天我在登陆和注册类里面已经可以实现程序界面的跳转了,
今天要做的程序类就是让程序可以实现图形化界面的操作。
10.
(1)设置学校信息窗口SetCollegeInfoFrame
用来设置学生的信息
完整代码:
package net.qt.student.gui;
import net.qt.student.bean.College;
import net.qt.student.service.CollegeService;
import net.qt.student.service.impl.CollegeServiceImpl;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
/**
* 功能:设置学校信息
* 作者:华卫
* 日期:2019年6月20日
*/
public class SetCollegeInfoFrame extends JFrame {
/**
* 面板
*/
JPanel panel;
JPanel pnlNorth;
JPanel panel1;
JPanel panel2;
JPanel panel3;
JPanel panel4;
JPanel panel5;
JPanel pnlCenter;
JPanel pnlSouth;
/**
* 标签
*/
JLabel lblName;
JLabel lblPresident;
JLabel lblStartTime;
JLabel lblTelephone;
JLabel lblEmail;
JLabel lblAddress;
JLabel lblProfile;
/**
* 按钮
*/
JButton btnSave;
JButton btnExit;
/**
* 文本框与文本区
*/
JTextField txtName;
JTextField txtPresident;
JTextField txtStartTime;
JTextField txtTelephone;
JTextField txtEMail;
JTextField txtAddress;
JTextArea txtProfile;
/**
* 滚动面板
*/
JScrollPane scrollPane;
/**
* 学校服务
*/
private CollegeService collegeService;
private College college;
private int id = 1;
/**
* 构造方法
*
* @param title
*/
public SetCollegeInfoFrame(String title) {
super(title);
initGUI();
}
/**
* 初始化用户界面
*/
private void initGUI() {
// 创建组件(面板与控件)
panel = (JPanel) getContentPane();
pnlNorth = new JPanel();
panel1 = new JPanel();
panel2 = new JPanel();
panel3 = new JPanel();
panel4 = new JPanel();
panel5 = new JPanel();
pnlCenter = new JPanel();
pnlSouth = new JPanel();
lblName = new JLabel("学校名称:");
lblPresident = new JLabel("校 长:");
lblStartTime = new JLabel("建校时间:");
lblTelephone = new JLabel("联系电话:");
lblEmail = new JLabel("电子邮箱:");
lblAddress = new JLabel("通讯地址:");
lblProfile = new JLabel("学校简介:");
txtName = new JTextField(30);
txtPresident = new JTextField(11);
txtStartTime = new JTextField(12);
txtTelephone = new JTextField(11);
txtEMail = new JTextField(12);
txtAddress = new JTextField(30);
txtProfile = new JTextArea(5, 37);
txtProfile.setLineWrap(true);// 让文本区自动换行
scrollPane = new JScrollPane(txtProfile, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED,
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
btnSave = new JButton("保存[S]");
btnSave.setMnemonic(KeyEvent.VK_S);
btnExit = new JButton("退出[X]");
btnExit.setMnemonic(KeyEvent.VK_X);
// 设置大面板布局,将北面板、中面板与南面板添加到大面板
panel.setLayout(new BorderLayout());
panel.add(pnlNorth, "North");
panel.add(pnlCenter, "Center");
panel.add(pnlSouth, "South");
// 设置北面板布局,添加五个小面板
pnlNorth.setLayout(new GridLayout(5, 1));
pnlNorth.add(panel1);
pnlNorth.add(panel2);
pnlNorth.add(panel3);
pnlNorth.add(panel4);
pnlNorth.add(panel5);
// 将控件依次添加到五个小面板
panel1.add(lblName);
panel1.add(txtName);
panel2.add(lblPresident);
panel2.add(txtPresident);
panel2.add(lblStartTime);
panel2.add(txtStartTime);
panel3.add(lblTelephone);
panel3.add(txtTelephone);
panel3.add(lblEmail);
panel3.add(txtEMail);
panel4.add(lblAddress);
panel4.add(txtAddress);
panel5.add(lblProfile);
// 将滚动面板添加到中面板
pnlCenter.add(scrollPane);
// 将两个按钮添加到南面板
pnlSouth.add(btnSave);
pnlSouth.add(btnExit);
// 创建学校服务对象
collegeService = new CollegeServiceImpl();
// 获取学校对象
college = collegeService.findCollegeById(id);
// 利用学校对象属性值设置相应控件的内容
txtName.setText(college.getName());
txtPresident.setText(college.getPresident());
txtStartTime.setText(college.getStartTime().toString());
txtTelephone.setText(college.getTelephone());
txtEMail.setText(college.getEmail());
txtAddress.setText(college.getAddress());
txtProfile.setText(college.getProfile());
// 设置窗口大小
setSize(450, 350);
// 设置窗口屏幕居中
setLocationRelativeTo(null);
// 设置窗口不可调整大小
setResizable(false);
// 设置窗口刚好容纳组件
pack();
// 设置窗口标题
setTitle("设置学校信息");
// 设置窗口可见
setVisible(true);
// 设置窗口默认关闭操作
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 【关闭】按钮单击事件处理
btnExit.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent event) {
// 关闭窗口
dispose();
}
});
// 【保存】按钮单击事件处理
btnSave.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent event) {
try {
// 修改学校对象属性
college.setName(txtName.getText());
college.setPresident(txtPresident.getText());
college.setStartTime(new Timestamp(
new SimpleDateFormat("yyyy-MM-dd")
.parse(txtStartTime.getText().toString()).getTime()));
college.setTelephone(txtTelephone.getText());
college.setEmail(txtEMail.getText());
college.setAddress(txtAddress.getText());
college.setProfile(txtProfile.getText());
// 更新学校信息
collegeService.updateCollege(college);
// 提示用户更新成功
JOptionPane.showMessageDialog(null, "更新数据成功!");
} catch (ParseException e) {
// 提示用户更新失败
JOptionPane.showMessageDialog(null, "更新数据失败!");
}
}
});
}
/**
* 主方法
*
* @param args
*/
public static void main(String[] args) {
new SetCollegeInfoFrame("");
}
}
在这里出现了如下的问题:
其实———只是因为括号的位置
运行效果如下:
是不是感觉截屏看起来没什么感觉?那我们试试刚刚安装的一个录屏软件:
(2)修改用户密码窗口ChangePasswordFrame
package net.qt.student.gui;
import net.qt.student.app.Application;
import net.qt.student.bean.User;
import net.qt.student.service.UserService;
import net.qt.student.service.impl.UserServiceImpl;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
/**
* 功能:修改用户密码
* 作者:谯婷
* 日期:2019.6.21
*/
public class ChangePasswordFrame extends JFrame {
/**
* 面板
*/
private JPanel panel;
private JPanel pnlRow1;
private JPanel pnlRow2;
private JPanel pnlRow3;
private JPanel pnlRow4;
private JPanel pnlRow5;
/**
* 标签
*/
private JLabel lblUsername;
private JLabel lblPassword;
private JLabel lblNewPassword1;
private JLabel lblNewPassword2;
/**
* 文本框
*/
private JTextField txtUsername;
private JPasswordField txtPassword;
private JPasswordField txtNewPassword1;
private JPasswordField txtNewPassword2;
/**
* 按钮
*/
private JButton btnOK;
private JButton btnCancel;
/**
* 用户服务对象
*/
private UserService userService;
/**
* 构造方法
* @param title
*/
public ChangePasswordFrame(String title){
super(title);
initGUI();
}
/**
* 初始化用户界面
*/
private void initGUI(){
//创建组件(面板与控件)
panel = (JPanel) getContentPane();
pnlRow1 = new JPanel( );
pnlRow2 = new JPanel( );
pnlRow3 = new JPanel( );
pnlRow4 = new JPanel( );
pnlRow5 = new JPanel( );
lblUsername = new JLabel( "用户名:" );
lblPassword = new JLabel( "旧密码:" );
lblNewPassword1 = new JLabel( "新密码:" );
lblNewPassword2 = new JLabel( "确 认:" );
txtUsername = new JTextField( 20 );
txtUsername.setEditable( false );
txtPassword = new JPasswordField( 20 );
txtNewPassword1 = new JPasswordField( 20 );
txtNewPassword2 = new JPasswordField( 20 );
btnOK = new JButton( "确定[O]" );
btnOK.setMnemonic( KeyEvent.VK_O );
btnCancel = new JButton( "取消[C]" );
btnCancel.setMnemonic( KeyEvent.VK_C );
//设置大面板布局,添加五个小面板
panel.setLayout( new GridLayout( 5,1 ) );
panel.add( pnlRow1 );
panel.add( pnlRow2 );
panel.add( pnlRow3 );
panel.add( pnlRow4 );
panel.add( pnlRow5 );
//将控件添加到五个小面板
pnlRow1.add( lblUsername );
pnlRow1.add( txtUsername );
pnlRow2.add( lblPassword );
pnlRow2.add( txtPassword );
pnlRow3.add( lblNewPassword1 );
pnlRow3.add( txtNewPassword1 );
pnlRow4.add( lblNewPassword2 );
pnlRow4.add( txtNewPassword2 );
pnlRow5.add( btnOK );
pnlRow5.add( btnCancel );
//设置窗口不可调整大小
setResizable( false );
//设置窗口刚好容纳组件
pack();
//设置窗口屏幕居中
setLocationRelativeTo( null );
//设置窗口标题
setTitle( "修改用户密码" );
//设置窗口可见
setVisible( true );
//设置窗口默认关闭操作
setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
//设置控件属性
txtUsername.setEditable( false );
txtUsername.setText( Application.username );
//【取消】按钮单击事件处理
btnCancel.addActionListener( new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
dispose();
}
} );
//【确定】按钮单击事件处理
btnOK.addActionListener( new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
changePassword();
}
} );
//【确定】按钮按键事件处理
btnOK.addKeyListener( new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == 10 ){
changePassword();
}
}
} );
//【用户名】文本框按键事件处理
txtUsername.addKeyListener( new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_ENTER){
txtPassword.requestFocus();
}
}
} );
//【密码】文本框按键事件处理
txtPassword.addKeyListener( new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_ENTER){
txtNewPassword1.requestFocus();
}
}
} );
//【新密码1】文本框按键事件处理
txtNewPassword1.addKeyListener( new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_ENTER){
txtNewPassword2.requestFocus();
}
}
} );
//【新密码2】文本框按键事件处理
txtNewPassword2.addKeyListener( new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_ENTER){
btnOK.requestFocus();
}
}
} );
}
/**
* 修改密码方法
*/
private void changePassword(){
//获取用户信息
int id = Application.id;
String username = Application.username;
//保存用户输入的旧密码与两个新密码
String password = new String( txtPassword.getPassword() );
String newpassword1 = new String( txtNewPassword1.getPassword() );
String newpassword2 = new String( txtNewPassword2.getPassword() );
//创建学生服务的对象
userService = new UserServiceImpl();
if (userService.login( username,password ) == null){
JOptionPane.showMessageDialog( null,"旧密码错误,请重新输入!","错误提示",JOptionPane.ERROR_MESSAGE );
txtPassword.requestFocus();
txtPassword.selectAll();
}else if (newpassword1.equals( "" )){
JOptionPane.showMessageDialog( null,"新密码不能为空!","错误提示",JOptionPane.ERROR_MESSAGE );
txtNewPassword1.requestFocus();
}else if (newpassword2.equals( "" )){
JOptionPane.showMessageDialog( null,"确认密码不能为空!","错误提示",JOptionPane.ERROR_MESSAGE );
txtNewPassword2.requestFocus();
}else if (!newpassword1.equals( newpassword2 )){
JOptionPane.showMessageDialog( null,"两次密码不一致,请重新输入!","错误提示",JOptionPane.ERROR_MESSAGE );
txtNewPassword1.setText( "" );
txtNewPassword2.setText( "" );
txtNewPassword1.requestFocus();
}else {
//按标识符获取用户
User user = userService.findUserById( id );
//修改用户的密码属性
user.setPassword( newpassword1 );
//调用用户服务的对象的更新方法,更新用户信息
int count = userService.updateUser( user );
if (count > 0) {
JOptionPane.showMessageDialog( null, "密码修改成功!", "设置密码", JOptionPane.INFORMATION_MESSAGE );
dispose();
} else {
JOptionPane.showMessageDialog( null, "密码修改失败!", "设置密码", JOptionPane.WARNING_MESSAGE );
}
}
}
/**
* 主方法
* @param args
*/
public static void main(String[] args) {
Application.id = 1;
Application.username = "李刚";
new ChangePasswordFrame( "" );
}
}
效果如下图:
(3)浏览学生窗口BrowseStudentsFrame
package net.qt.student.gui;
import net.qt.student.bean.Student;
import net.qt.student.service.StudentService;
import net.qt.student.service.impl.StudentServiceImpl;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.util.List;
/**
* 功能:浏览学生记录
* 作者:谯婷
* 日期:2019.6.21
*/
public class BrowseStudentsFrame extends JFrame {
/**
* 声明面板
*/
private JPanel panel;
private JPanel pnlCenter;
private JPanel pnlRow1;
private JPanel pnlRow2;
private JPanel pnlRow3;
private JPanel pnlRow4;
private JPanel pnlRow5;
private JPanel pnlRow6;
private JPanel pnlRow7;
private JPanel pnlSouth;
/**
*
* 声明标签
*/
private JLabel lblID;
private JLabel lblName;
private JLabel lblSex;
private JLabel lblAge;
private JLabel lblDepartment;
private JLabel lblClass;
private JLabel lblTelephone;
/**
* 声明文本框
*/
private JTextField txtID;
private JTextField txtName;
private JTextField txtSex;
private JTextField txtAge;
private JTextField txtDepartment;
private JTextField txtClass;
private JTextField txtTelephone;
/**
* 声明按钮
*/
private JButton btnTop;
private JButton btnPrevious;
private JButton btnNext;
private JButton btnBottom;
private JButton btnExit;
/**
* 当前记录行号
*/
private int currentRow;
/**
* 学生列表
*/
private List<Student>students;
/**
* 创建学生服务对象
*/
StudentService studentService;
/**
* 构造方法
* @param title
*/
public BrowseStudentsFrame(String title){
super(title);
initGUI();
}
/**
* 初始化用户界面
*/
private void initGUI(){
//创建组件
panel = (JPanel)getContentPane();
pnlCenter = new JPanel( );
pnlSouth = new JPanel( );
pnlRow1 = new JPanel( );
pnlRow2 = new JPanel( );
pnlRow3 = new JPanel( );
pnlRow4 = new JPanel( );
pnlRow5 = new JPanel( );
pnlRow6= new JPanel( );
pnlRow7 = new JPanel( );
pnlRow1.setLayout( new FlowLayout( FlowLayout.LEFT ) );
pnlRow2.setLayout( new FlowLayout( FlowLayout.LEFT ) );
pnlRow3.setLayout( new FlowLayout( FlowLayout.LEFT ) );
pnlRow4.setLayout( new FlowLayout( FlowLayout.LEFT ) );
pnlRow5.setLayout( new FlowLayout( FlowLayout.LEFT ) );
pnlRow6.setLayout( new FlowLayout( FlowLayout.LEFT ) );
pnlRow7.setLayout( new FlowLayout( FlowLayout.LEFT ) );
lblID = new JLabel( "学号:" );
lblName = new JLabel( "姓名:" );
lblSex = new JLabel( "性别:" );
lblAge = new JLabel( "年龄:" );
lblDepartment = new JLabel( "系部:" );
lblClass = new JLabel( "班级:" );
lblTelephone = new JLabel( "电话:" );
txtID = new JTextField( 40 );
txtName = new JTextField( 40 );
txtSex = new JTextField( 40 );
txtAge = new JTextField( 40 );
txtDepartment = new JTextField( 40 );
txtClass = new JTextField( 40 );
txtTelephone = new JTextField( 40 );
txtID.setEditable( false );
txtSex.setEditable( false );
txtAge.setEditable( false );
txtDepartment.setEditable( false );
txtClass.setEditable( false );
txtTelephone.setEditable( false );
btnTop = new JButton( "第一条[T]" );
btnPrevious = new JButton( "上一条[P]" );
btnNext = new JButton( "下一条[N]" );
btnBottom = new JButton( "最后一条[B]" );
btnExit = new JButton( "退出[X]" );
btnTop.setMnemonic( KeyEvent.VK_T );
btnPrevious.setMnemonic( KeyEvent.VK_P );
btnNext.setMnemonic( KeyEvent.VK_N );
btnBottom.setMnemonic( KeyEvent.VK_B );
btnExit.setMnemonic( KeyEvent.VK_X );
//添加组件
panel.setLayout( new BorderLayout( ) );
panel.add( pnlCenter,BorderLayout.CENTER );
panel.add( pnlSouth,BorderLayout.SOUTH );
pnlCenter.setLayout( new GridLayout( 7,1 ) );
pnlCenter.add( pnlRow1 );
pnlCenter.add( pnlRow2 );
pnlCenter.add( pnlRow3 );
pnlCenter.add( pnlRow4 );
pnlCenter.add( pnlRow5 );
pnlCenter.add( pnlRow6 );
pnlCenter.add( pnlRow7 );
pnlRow1.add(lblID);
pnlRow1.add( txtID );
pnlRow2.add( lblName );
pnlRow2.add( txtName );
pnlRow3.add( lblSex );
pnlRow3.add( txtSex );
pnlRow4.add( lblAge );
pnlRow4.add( txtAge );
pnlRow5.add( lblDepartment );
pnlRow5.add( txtDepartment );
pnlRow6.add( lblClass );
pnlRow6.add( txtClass );
pnlRow7.add( lblTelephone );
pnlRow7.add( txtTelephone );
pnlSouth.add( btnTop );
pnlSouth.add( btnPrevious );
pnlSouth.add( btnNext );
pnlSouth.add( btnBottom );
pnlSouth.add( btnExit );
//设置窗口属性
setSize( 500,300 );
//设置窗口不可调整大小
setResizable( false );
//设置窗口刚好容纳组件
pack();
//设置窗口屏幕居中
setLocationRelativeTo( null );
//设置窗口可见
setVisible( true );
//设置窗口默认关闭操作
setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
//创建学生服务对象
studentService = new StudentServiceImpl();
//获取全部学生列表
students = studentService.findAllStudents();
//判断是否有学生记录
if(students.size() > 0){
//设置当前账号
currentRow = 1;
//设置窗口标题
setTitle( "浏览学生记录"+"&& 当前记录:" + currentRow );
//填充窗口各文本框数据
fillFrameData(currentRow);
}else{
JOptionPane.showMessageDialog( null,"表中没有记录!","浏览学生表记录",JOptionPane.ERROR_MESSAGE );
btnTop.setEnabled( false );
btnPrevious.setEnabled( false );
btnNext.setEnabled( false );
btnBottom.setEnabled( false );
}
//【第一条】按钮单击事件
btnTop.addActionListener( new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//设置当前记录号
currentRow = 1;
//填充当前记录数据
fillFrameData(currentRow);
}
} );
//【上一条】按钮单击事件
btnPrevious.addActionListener( new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if(currentRow > 1){
//设置当前记录号
currentRow--;
//填充当前记录数据
fillFrameData(currentRow);
}else{
JOptionPane.showMessageDialog( null,"已到第一条记录!","浏览学校表记录",JOptionPane.WARNING_MESSAGE );
}
}
} );
//【下一条】按钮单击事件
btnNext.addActionListener( new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (currentRow < students.size() - 1){
//设置当前记录号
currentRow++;
//填充当前记录数据
fillFrameData(currentRow);
}else{
JOptionPane.showMessageDialog( null,"已到最后一条记录!","浏览学生表记录",JOptionPane.WARNING_MESSAGE );
}
}
} );
//【最后一条】按钮单击事件
btnBottom.addActionListener( new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//设置当前记录号
currentRow = students.size() - 1;
//填充当前记录数据
fillFrameData(currentRow);
}
} );
//【退出】按钮单击事件
btnExit.addActionListener( new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
dispose();
}
} );
}
/**
* 将当前数据填充窗口各文本框
* @param currentRow
*/
private void fillFrameData(int currentRow){
if (currentRow > 0){
setTitle( "浏览学生记录" + "&&当前记录:" + currentRow );
txtID.setText( students.get( currentRow ).getId() );
txtName.setText( students.get( currentRow ).getName() );
txtSex.setText( students.get( currentRow ).getSex() );
txtAge.setText( students.get( currentRow ).getAge()+ "" );
txtDepartment.setText( students.get( currentRow ).getDepartment() );
txtDepartment.setText( students.get( currentRow ).getDepartment() );
txtClass.setText( students.get( currentRow ).getClazz() );
txtTelephone.setText( students.get( currentRow ).getTelephone() );
}
}
/**
* 主方法
* @param args
*/
public static void main(String[] args) {
new BrowseStudentsFrame( "" );
}
}
效果如下:
(4)添加学生窗口AddStudentFrame
package net.qt.student.gui;
import jdk.nashorn.internal.scripts.JO;
import net.qt.student.bean.Student;
import net.qt.student.service.StudentService;
import net.qt.student.service.impl.StudentServiceImpl;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.List;
/**
* 功能:添加学生记录
* 作者:谯婷
* 日期:2019.6.20
*/
public class AddStudentFrame extends JFrame {
/**
* 声明面板
*/
private JPanel panel;
private JPanel pnlCenter;
private JPanel pnlRow1;
private JPanel pnlRow2;
private JPanel pnlRow3;
private JPanel pnlRow4;
private JPanel pnlRow5;
private JPanel pnlRow6;
private JPanel pnlRow7;
private JPanel panSouth;
/**
* 声明标签
*/
private JLabel lblID;
private JLabel lblName;
private JLabel lblSex;
private JLabel lblAge;
private JLabel lblDepartment;
private JLabel lblClass;
private JLabel lblTelephone;
/**
* 声明文本框
*/
private JTextField txtId;
private JTextField txtName;
private JTextField txtSex;
private JTextField txtAge;
private JTextField txtDepartment;
private JTextField txtClass;
private JTextField txtTelephone;
/**
* 声明按钮
*/
private JButton btnExit;
private JButton btnOk;
private JButton btnCancel;
/**
*当前记录行号
*/
private int currentRow;
/**
* 学生列表
*/
private List<Student>students;
/**
* 构造方法
* @param title
*/
public AddStudentFrame(String title){
super(title);
initGUI();
}
/**
* 初始化用户界面
*/
private void initGUI(){
//创建组件
panel = (JPanel)getContentPane();
pnlCenter = new JPanel( );
panSouth = new JPanel( );
pnlRow1 = new JPanel( );
pnlRow2 = new JPanel( );
pnlRow3 = new JPanel( );
pnlRow4 = new JPanel( );
pnlRow5 = new JPanel( );
pnlRow6 = new JPanel( );
pnlRow7 = new JPanel( );
pnlRow1.setLayout( new FlowLayout( FlowLayout.LEFT ) );
pnlRow2.setLayout( new FlowLayout( FlowLayout.LEFT ) );
pnlRow3.setLayout( new FlowLayout( FlowLayout.LEFT ) );
pnlRow4.setLayout( new FlowLayout( FlowLayout.LEFT ) );
pnlRow5.setLayout( new FlowLayout( FlowLayout.LEFT ) );
pnlRow6.setLayout( new FlowLayout( FlowLayout.LEFT ) );
pnlRow7.setLayout( new FlowLayout( FlowLayout.LEFT ) );
lblID = new JLabel( "学号:" );
lblName = new JLabel( "姓名:" );
lblSex = new JLabel( "性别:" );
lblAge = new JLabel( "年龄:" );
lblDepartment = new JLabel( "系部:" );
lblClass = new JLabel( "班级:" );
lblTelephone = new JLabel( "学电话:" );
txtId = new JTextField( 20 );
txtName = new JTextField( 20 );
txtSex = new JTextField( 20 );
txtAge = new JTextField( 20 );
txtDepartment = new JTextField( 20 );
txtClass = new JTextField( 20 );
txtTelephone = new JTextField( 20 );
btnOk = new JButton( "确定[o]" );
btnCancel = new JButton( "取消[C]" );
btnExit = new JButton( "退出[X]" );
btnOk.setMnemonic( KeyEvent.VK_O );
btnCancel.setMnemonic( KeyEvent.VK_C );
btnExit.setMnemonic( KeyEvent.VK_X );
//添加组件
panel.setLayout( new BorderLayout( ) );
panel.add( pnlCenter,BorderLayout.CENTER );
panel.add( panSouth,BorderLayout.SOUTH );
pnlCenter.setLayout( new GridLayout( 7,1 ) );
pnlCenter.add( pnlRow1 );
pnlCenter.add( pnlRow2 );
pnlCenter.add( pnlRow3 );
pnlCenter.add( pnlRow4 );
pnlCenter.add( pnlRow5 );
pnlCenter.add( pnlRow6 );
pnlCenter.add( pnlRow7 );
pnlRow1.add( lblID );
pnlRow1.add( txtId );
pnlRow2.add( lblName );
pnlRow2.add( txtName );
pnlRow3.add( lblSex );
pnlRow3.add( txtSex );
pnlRow4.add( lblAge );
pnlRow4.add( txtAge );
pnlRow5.add( lblDepartment );
pnlRow5.add( txtDepartment );
pnlRow6.add( lblClass );
pnlRow6.add( txtClass );
pnlRow7.add( lblTelephone );
pnlRow7.add( txtTelephone );
panSouth.add( btnOk );
panSouth.add( btnCancel );
panSouth.add( btnExit);
//设置窗口属性
setSize( 500,300 );
//设置窗口不可调整大小
setResizable( false );
//设置窗口刚好容纳组件
pack();
//设置窗口屏幕居中
setLocationRelativeTo( null );
//设置窗口标题
setTitle( "添加学生记录" );
//设置窗口可见
setVisible( true );
//设置窗口默认关闭操作
setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
//【确定】按钮单击事件
btnOk.addActionListener( new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//学号非空校验
if(txtId.getText().trim().equals( "" )){
JOptionPane.showMessageDialog( null,"学号不能为空!" ,"增加学生记录",JOptionPane.WARNING_MESSAGE);
txtId.requestFocus();
return;
}
//年龄数字校验
if(!isNumber(txtAge.getText().trim())){
JOptionPane.showMessageDialog( null,"注意:年龄全由数字构成!","增加学生记录", JOptionPane.WARNING_MESSAGE);
txtAge.setText( "" );
txtAge.requestFocus();
return;
}
//创建学生实体
Student student = new Student();
//设置学生实体属性
student.setId( txtId.getText().trim() );
student.setName( txtName.getText().trim() );
student.setSex( txtSex.getText().trim() );
student.setAge( Integer.parseInt( txtAge.getText() ) );
student.setDepartment( txtDepartment.getText().trim() );
student.setClazz( txtClass.getText().trim() );
student.setTelephone( txtTelephone.getText().trim() );
//创建学生服务对象
StudentService studentService = new StudentServiceImpl();
//添加学生记录
int count = studentService.addStudent( student );
//判断是否添加成功
if(count > 0){
JOptionPane.showMessageDialog( null,"添加记录成功!","增加学生记录",JOptionPane.INFORMATION_MESSAGE );
txtId.setText("");
txtName.setText( "" );
txtSex.setText( "" );
txtAge.setText( "" );
txtDepartment.setText( "" );
txtClass.setText( "" );
txtTelephone.setText( "" );
txtId.requestFocus();
}else{
JOptionPane.showMessageDialog( null,"添加学生记录失败","增加学生记录",JOptionPane.ERROR_MESSAGE );
}
}
} );
//【取消】按钮单击事件处理
btnCancel.addActionListener( new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
txtId.setText( "" );
txtName.setText( "" );
txtSex.setText( "" );
txtAge.setText( "" );
txtDepartment.setText( "" );
txtClass.setText( "" );
txtTelephone.setText( "" );
txtId.requestFocus();
}
} );
//【退出】按钮单击事件处理
btnExit.addActionListener( new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
dispose();
}
} );
//【学号】文本框按键事件处理
txtId.addKeyListener( new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_ENTER){
if(!txtId.getText().trim().equals( "" )){
txtName.requestFocus();
}
}
}
} );
//【姓名】文本框按键事件处理
txtName.addKeyListener( new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_ENTER){
txtSex.requestFocus();
}
}
} );
//【性别】文本框按键事件处理
txtSex.addKeyListener( new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_ENTER){
txtAge.requestFocus();
}
}
} );
//【年龄】文本框按键事件处理
txtAge.addKeyListener( new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_ENTER){
txtDepartment.requestFocus();
}
}
} );
//【系部】文本框按键事件处理
txtDepartment.addKeyListener( new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_ENTER){
txtClass.requestFocus();
}
}
} );
//【班级】文本框按键事件处理
txtClass.addKeyListener( new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_ENTER){
txtTelephone.requestFocus();
}
}
} );
}
/**
* 判断一个字符串是否全是数字
* @param str
* @return
*/
boolean isNumber(String str){
for(int i = 0;i < str.length();i++){
if(str.charAt( i ) < '0'|| str.charAt( i ) > '9'){
return false;
}
}
return true;
}
/**
* 主方法
* @param args
*/
public static void main(String[] args) {
new AddStudentFrame( "" );
}
}
运行结果如下:
通过这几天的代码累计,我发现自己已经慢慢的学会了自己排错误,而且慢慢也懂得了一些代码的意思,不再是之前的盲目敲击代码啦~~加油哈哈哈,晚安!好好爱自己哟