效果图:
先用sqlyog连接数据库创建新的数据库并创建一个表,如图:
数据库连接代码
1 package com.shine.util; 2 3 import java.sql.Connection; 4 import java.sql.DriverManager; 5 6 /** 7 * 数据库工具类 8 * @author 75476 9 * 10 */ 11 public class Db_util { 12 private String dburl="jdbc:mysql://localhost:3306/gb_book";//数据库地址连接 13 private String dbUserName="root"; 14 private String dbPassword="754764"; 15 private String jdbcName="com.mysql.jdbc.Driver"; 16 /** 17 * 获取数据库连接 18 * @return 19 * @throws Exception 20 */ 21 public Connection getCon()throws Exception{ 22 Class.forName(jdbcName); 23 Connection con= DriverManager.getConnection(dburl, dbUserName, dbPassword); 24 return con; 25 26 } 27 /** 28 * 关闭数据库连接 29 * @param con 30 * @throws Exception 31 */ 32 public void closeCon(Connection con) throws Exception{ 33 if(con!=null) 34 con.close(); 35 } 36 public static void main(String[] args) { 37 Db_util dbutil=new Db_util(); 38 try { 39 dbutil.getCon(); 40 System.out.println("数据库连接成功"); 41 } catch (Exception e) { 42 // TODO 自动生成的 catch 块 43 e.printStackTrace(); 44 System.out.println("数据库连接失败"); 45 } 46 47 } 48 }
用户实体代码,
1 package com.shine.model; 2 /** 3 * 用户实体 4 * @author 75476 5 * 6 */ 7 public class User { 8 private int id; 9 private String userName; 10 private String Password; 11 12 public User() { 13 super(); 14 15 } 16 17 public User(String userName, String password) { 18 super(); 19 this.userName = userName; 20 Password = password; 21 } 22 23 24 public int getId() { 25 return id; 26 } 27 public void setId(int id) { 28 this.id = id; 29 } 30 public String getUserName() { 31 return userName; 32 } 33 public void setUserName(String userName) { 34 this.userName = userName; 35 } 36 public String getPassword() { 37 return Password; 38 } 39 public void setPassword(String password) { 40 Password = password; 41 } 42 43 44 }
用户dao类
1 package com.shine.dao; 2 3 4 5 import java.sql.Connection; 6 import java.sql.PreparedStatement; 7 import java.sql.ResultSet; 8 9 import com.shine.model.User; 10 11 /** 12 * 用户Dao类 13 * @author 75476 14 * 15 */ 16 public class UserDao { 17 /** 18 * 登陆验证 19 * @param con 20 * @param user 21 * @return 22 * @throws Exception 23 */ 24 public User login(Connection con,User user)throws Exception{ 25 User resultUser=null; 26 String sql="select * from t_user where userName=? and Password=?"; 27 PreparedStatement pstmt =con.prepareStatement(sql); 28 pstmt.setString(1, user.getUserName()); 29 pstmt.setString(2, user.getPassword()); 30 ResultSet rs=pstmt.executeQuery(); 31 if(rs.next()){ 32 resultUser=new User(); 33 resultUser.setId(rs.getInt("id")); 34 resultUser.setUserName(rs.getString("userName")); 35 resultUser.setPassword(rs.getString("Password")); 36 } 37 return resultUser; 38 39 } 40 41 }
登陆界面设计,动作监听,这里用的是windowbuilder插件
1 package com.shine.view; 2 3 import java.awt.EventQueue; 4 import java.awt.Font; 5 import java.awt.event.ActionEvent; 6 import java.awt.event.ActionListener; 7 import java.sql.Connection; 8 9 import javax.swing.GroupLayout; 10 import javax.swing.GroupLayout.Alignment; 11 import javax.swing.ImageIcon; 12 import javax.swing.JButton; 13 import javax.swing.JFrame; 14 import javax.swing.JLabel; 15 import javax.swing.JOptionPane; 16 import javax.swing.JPanel; 17 import javax.swing.JPasswordField; 18 import javax.swing.JTextField; 19 import javax.swing.border.EmptyBorder; 20 21 import com.shine.dao.UserDao; 22 import com.shine.model.User; 23 import com.shine.util.Db_util; 24 import com.shine.util.Stringutil; 25 26 public class logOn extends JFrame { 27 28 private Db_util dbutil=new Db_util(); 29 private UserDao userDao=new UserDao(); 30 private JPanel contentPane; 31 private JTextField userNameTxt; 32 private JPasswordField PasswordTxt; 33 34 /** 35 * Launch the application. 36 */ 37 public static void main(String[] args) { 38 EventQueue.invokeLater(new Runnable() { 39 public void run() { 40 try { 41 logOn frame = new logOn(); 42 frame.setVisible(true); 43 } catch (Exception e) { 44 e.printStackTrace(); 45 } 46 } 47 }); 48 } 49 50 /** 51 * Create the frame. 52 */ 53 public logOn() { 54 setResizable(false); 55 setTitle("u7BA1u7406u5458u767Bu9646"); 56 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 57 setBounds(100, 100, 665, 532); 58 contentPane = new JPanel(); 59 contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); 60 setContentPane(contentPane); 61 62 JLabel lblNewLabel = new JLabel("u56FEu4E66u7BA1u7406u7CFBu7EDF"); 63 lblNewLabel.setFont(new Font("宋体", Font.BOLD, 22)); 64 lblNewLabel.setIcon(new ImageIcon(logOn.class.getResource("/imags/558952.gif"))); 65 66 JLabel lblNewLabel_1 = new JLabel("u7528u6237u540D"); 67 lblNewLabel_1.setIcon(new ImageIcon(logOn.class.getResource("/imags/userName.png"))); 68 lblNewLabel_1.setFont(new Font("宋体", Font.BOLD, 20)); 69 70 JLabel lblNewLabel_2 = new JLabel("u5BC6 u7801"); 71 lblNewLabel_2.setIcon(new ImageIcon(logOn.class.getResource("/imags/password.png"))); 72 lblNewLabel_2.setFont(new Font("宋体", Font.BOLD, 20)); 73 74 userNameTxt = new JTextField(); 75 userNameTxt.setColumns(10); 76 77 PasswordTxt = new JPasswordField(); 78 79 JButton btnNewButton = new JButton("u767B u9646"); 80 btnNewButton.addActionListener(new ActionListener() { 81 public void actionPerformed(ActionEvent e) { 82 logInActionperformed(e); 83 } 84 }); 85 btnNewButton.setIcon(new ImageIcon(logOn.class.getResource("/imags/login.png"))); 86 btnNewButton.setFont(new Font("宋体", Font.BOLD, 18)); 87 88 JButton button = new JButton("u91CD u7F6E"); 89 button.addActionListener(new ActionListener() { 90 public void actionPerformed(ActionEvent e) { 91 resetValueActionperformed(e); 92 } 93 }); 94 button.setIcon(new ImageIcon(logOn.class.getResource("/imags/reset.png"))); 95 button.setFont(new Font("宋体", Font.BOLD, 18)); 96 GroupLayout gl_contentPane = new GroupLayout(contentPane); 97 gl_contentPane.setHorizontalGroup( 98 gl_contentPane.createParallelGroup(Alignment.LEADING) 99 .addGroup(gl_contentPane.createSequentialGroup() 100 .addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING) 101 .addGroup(gl_contentPane.createSequentialGroup() 102 .addGap(163) 103 .addComponent(lblNewLabel)) 104 .addGroup(gl_contentPane.createSequentialGroup() 105 .addGap(101) 106 .addGroup(gl_contentPane.createParallelGroup(Alignment.TRAILING) 107 .addGroup(gl_contentPane.createSequentialGroup() 108 .addComponent(lblNewLabel_1) 109 .addGap(19)) 110 .addGroup(gl_contentPane.createSequentialGroup() 111 .addComponent(lblNewLabel_2) 112 .addGap(18))) 113 .addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING) 114 .addComponent(userNameTxt, GroupLayout.DEFAULT_SIZE, 166, Short.MAX_VALUE) 115 .addComponent(PasswordTxt, GroupLayout.PREFERRED_SIZE, 267, GroupLayout.PREFERRED_SIZE))) 116 .addGroup(Alignment.TRAILING, gl_contentPane.createSequentialGroup() 117 .addContainerGap() 118 .addComponent(btnNewButton) 119 .addGap(94) 120 .addComponent(button, GroupLayout.PREFERRED_SIZE, 110, GroupLayout.PREFERRED_SIZE))) 121 .addGap(179)) 122 ); 123 gl_contentPane.setVerticalGroup( 124 gl_contentPane.createParallelGroup(Alignment.LEADING) 125 .addGroup(gl_contentPane.createSequentialGroup() 126 .addGap(35) 127 .addComponent(lblNewLabel) 128 .addGap(54) 129 .addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE) 130 .addComponent(lblNewLabel_1) 131 .addComponent(userNameTxt, GroupLayout.PREFERRED_SIZE, 41, GroupLayout.PREFERRED_SIZE)) 132 .addGap(47) 133 .addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE) 134 .addComponent(lblNewLabel_2) 135 .addComponent(PasswordTxt, GroupLayout.PREFERRED_SIZE, 41, GroupLayout.PREFERRED_SIZE)) 136 .addGap(68) 137 .addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE) 138 .addComponent(button, GroupLayout.PREFERRED_SIZE, 37, GroupLayout.PREFERRED_SIZE) 139 .addComponent(btnNewButton, GroupLayout.PREFERRED_SIZE, 37, GroupLayout.PREFERRED_SIZE)) 140 .addContainerGap(95, Short.MAX_VALUE)) 141 ); 142 contentPane.setLayout(gl_contentPane); 143 } 144 /** 145 * 登陆事件 146 * @param e 147 */ 148 private void logInActionperformed(ActionEvent e) { 149 String userName=this.userNameTxt.getText(); 150 String Password=new String(this.PasswordTxt.getPassword()); 151 if(Stringutil.isEmpty(userName)){ 152 JOptionPane.showMessageDialog(null, "用户名不可为空"); 153 return; 154 155 } 156 if(Stringutil.isEmpty(Password)){ 157 JOptionPane.showMessageDialog(null, "密码不可为空"); 158 return; 159 } 160 User user=new User(userName,Password); 161 Connection con=null; 162 try { 163 con=dbutil.getCon(); 164 User currentUser=userDao.login(con, user); 165 if(currentUser!=null){ 166 JOptionPane.showMessageDialog(null, "登陆成功"); 167 168 }else{ 169 JOptionPane.showMessageDialog(null, "用户名或密码错误!"); 170 } 171 } catch (Exception e1) { 172 // TODO 自动生成的 catch 块 173 e1.printStackTrace(); 174 } 175 } 176 177 /** 178 * 重置事件处理 179 * @param e 180 */ 181 protected void resetValueActionperformed(ActionEvent evt) { 182 this.userNameTxt.setText(""); 183 this.PasswordTxt.setText(""); 184 } 185 }
判断输入框是否为空
1 package com.shine.util; 2 /** 3 * 字符串工具类 4 * @author 75476 5 * 6 */ 7 public class Stringutil { 8 public static boolean isEmpty(String str){ 9 if(str==null||"".equals(str.trim())){ 10 return true; 11 12 }else{ 13 return false; 14 } 15 } 16 public static boolean isNotEmpty(String str){ 17 if(str!=null||"".equals(str.trim())){ 18 return true; 19 20 }else{ 21 return false; 22 } 23 } 24 }
附上一些常用的快捷键
Alt + / 内容提示:
Ctrl + 1 提示
Ctrl + shift + O 导包
Ctrl + Shift + F 格式化代码块
Alt+上下键 代码位置调换
Ctrl+/ 添加/除去单行注释
Ctrl+Shift+/ 添加多行注释
Ctrl+Shift+ 删除多行注释
window->reset perspective 重置透视图
Ctrl+Shift+X 更改为大写
Ctrl+Shift+Y 更改为小写
Ctrl+Alt+向下键 复制行
Ctrl+单击 需要查看源码的类
Ctrl+Shift+T 需要查看源码的类
shift+tab 左对齐