本文參考與:https://blog.csdn.net/wyf2017/article/details/78831744
https://blog.csdn.net/MengKun822/article/details/89302921
一.登錄界面
1.程序代碼
1 import java.awt.*;//導入awt包 2 import javax.swing.*;//導入swing包 3 import java.awt.event.ActionListener;//導入awt包中的監聽器事件包 4 import java.awt.event.ActionEvent;//導入awt包中的ActionEvent事件包 5 6 public class EnterScreen extends JFrame { 7 static int s=0; 8 public EnterScreen() { 9 Yanzhencode vcode = new Yanzhencode(); 10 setSize(300,290);//設計窗體的大小 11 setTitle("請登錄"); 12 setBackground(Color.RED);//設置背景顏色 13 JLabel a=new JLabel("登錄名"); //實例化JLabel對象 14 JLabel b=new JLabel("密 碼"); 15 JLabel g=new JLabel("忘記用戶名/密碼?"); 16 JLabel h=new JLabel("驗證碼"); 17 g.setForeground(Color.BLUE); 18 JTextField c=new JTextField(15);//實例化用戶名文本框 19 JPasswordField d=new JPasswordField(15);//實例化密碼框 20 JTextField k=new JTextField(4);//實例化驗證碼框 21 d.setEchoChar('*');//將輸入密碼框中的密碼以*顯示出來 22 JButton e=new JButton("登錄"); 23 JButton f=new JButton("快速注冊"); 24 e.setBackground(Color.YELLOW);//設置登錄按鈕字體顏色 25 f.setForeground(Color.GRAY);//設置快速登錄按鈕填充色 26 setVisible(true);//使窗體可視化 27 Container m=getContentPane();//獲取一個容器 28 getContentPane().setBackground(Color.WHITE);//設置窗體填充色 29 // 將用戶名、密碼的Jlabel和用戶名JTextField文本框、密碼JPasswordField密碼框以及確定JButton、快速注冊JButton添加到container容器里面 // 30 m.add(a); 31 m.add(b); 32 m.add(c); 33 m.add(d); 34 m.add(e); 35 m.add(f); 36 m.add(g); 37 m.add(h); 38 m.add(k); 39 m.add(vcode); 40 setBounds(300,300,300,300);//設置窗體的長寬各為300、300 讓其顯示在左上方的300、300處 41 m.setLayout(null); 42 // a、b、c、d、e、f顯示在container容器中的位置坐標 43 a.setBounds(10,40,50,18); 44 b.setBounds(10,80,50,18); 45 c.setBounds(60,40,130,18); 46 d.setBounds(60,80,130,18); 47 h.setBounds(10,120,50,18); 48 k.setBounds(60,120,80,18); 49 e.setBounds(90,180,100,30); 50 f.setBounds(90,220,100,30); 51 g.setBounds(190,75,100,30); 52 vcode.setBounds(140,110,80,30); 53 e.addActionListener(new ActionListener() {//對登錄按鈕添加監聽事件 54 55 @SuppressWarnings("deprecation") 56 @Override 57 public void actionPerformed(ActionEvent arg0) { 58 // TODO Auto-generated method stub 59 60 if(c.getText().trim().equals("xiaoyang")&&new String(d.getPassword()).equals("123456")&&s==1) {//equals函數進行用戶名和密碼的匹配 61 JOptionPane.showMessageDialog(null,"登錄成功"); 62 63 new NewFrame();//進入到NewFrame這個窗體中 64 }else if(c.getText().trim().equals("xiaoyang")&&new String(d.getPassword()).equals("123456")&&s==0) { 65 JOptionPane.showMessageDialog(null,"驗證碼輸入錯誤"); 66 }else { 67 JOptionPane.showMessageDialog(null, "登錄失敗,用戶名、密碼或驗證碼輸入錯誤"); 68 } 69 } 70 71 }); 72 f.addActionListener(new ActionListener(){//對快速注冊按鈕添加監聽事件 73 @SuppressWarnings("deprecation") 74 @Override 75 public void actionPerformed(ActionEvent arg0) { 76 // TODO Auto-generated method stub 77 new zhuce();//進入都到zhuce窗體中 78 } 79 80 }); 81 //判斷輸入驗證碼是否正確 82 if(k.getText()== null) { 83 s=0; 84 }else if(vcode.getCode() == null) { 85 s=1; 86 }else if(vcode.getCode() .equals(k.getText())) { 87 s=1; 88 }else { 89 s=0; 90 } 91 } 92 93 public static void main(String[] args) { 94 new EnterScreen(); 95 96 } 97 98 }
2.登錄界面截圖
二.快速注冊界面
1.程序代碼
1 import java.awt.*; 2 import javax.swing.*; 3 import java.awt.event.ActionListener; 4 import java.awt.event.ActionEvent; 5 import java.sql.*; 6 import java.awt.Container; 7 8 import javax.swing.JButton; 9 import javax.swing.JLabel; 10 import javax.swing.JPasswordField; 11 import javax.swing.JTextField; 12 13 public class zhuce extends JFrame { 14 public zhuce() { 15 setSize(300,250);//設計窗體的大小 16 JLabel a=new JLabel("用戶名"); //實例化JLabel對象 17 JLabel b=new JLabel("密 碼"); 18 JLabel h=new JLabel("再次確認密碼"); 19 JTextField c=new JTextField(15);//實例化用戶名文本框 20 JPasswordField d=new JPasswordField(15);//實例化密碼文本框 21 JPasswordField hd=new JPasswordField(15);//實例化密碼文本框 22 d.setEchoChar('*');//設置密碼隱藏制度 23 JButton e=new JButton("確定"); 24 JButton f=new JButton("重置"); 25 JButton g=new JButton("返回"); 26 setVisible(true); 27 //獲取一個容器 28 Container m=getContentPane(); 29 // 將用戶名、密碼的Jlabel和用戶名JTextField文本框、密碼JPasswordField密碼框以及確定JButton、快速注冊JButton添加到container容器里面 30 m.add(a); 31 m.add(b); 32 m.add(h); 33 m.add(hd); 34 m.add(c); 35 m.add(d); 36 m.add(e); 37 m.add(f); 38 m.add(g); 39 //設置窗體的長寬各為300、250 讓其顯示在左上方的300、250處 40 setBounds(300,250,300,250); 41 m.setLayout(null); 42 // a、b、c、d、e、f顯示在container容器中的位置坐標 43 a.setBounds(10,40,50,18); 44 b.setBounds(10,80,50,18); 45 h.setBounds(5,120,80,18); 46 c.setBounds(60,40,200,18); 47 d.setBounds(60,80,200,18); 48 hd.setBounds(90,120,180,18); 49 e.setBounds(110,160,60,30); 50 f.setBounds(30,160,60,30); 51 g.setBounds(190,160,60,30); 52 g.addActionListener(new ActionListener() {//對返回按鈕添加監聽事件 53 @SuppressWarnings("deprecation") 54 @Override 55 public void actionPerformed(ActionEvent arg0) { 56 // TODO Auto-generated method stub 57 new EnterScreen(); 58 59 } 60 }); 61 f.addActionListener(new ActionListener() {//對確認按鈕添加監聽事件 62 @SuppressWarnings("deprecation") 63 @Override 64 public void actionPerformed(ActionEvent arg0) { 65 // TODO Auto-generated method stub 66 new EnterScreen(); 67 68 } 69 }); 70 e.addActionListener(new ActionListener() {//對確認按鈕添加監聽事件 71 @SuppressWarnings("deprecation") 72 @Override 73 public void actionPerformed(ActionEvent arg0) { 74 // TODO Auto-generated method stub 75 new zhuce(); 76 77 } 78 }); 79 } 80 }
2.快速注冊界面截圖
三.驗證碼部分
1.驗證碼程序
1 import java.awt.Color; 2 import java.awt.Dimension; 3 import java.awt.Font; 4 import java.awt.FontMetrics; 5 import java.awt.Graphics; 6 import java.awt.Graphics2D; 7 import java.awt.event.MouseEvent; 8 import java.awt.event.MouseListener; 9 10 import java.util.Random; 11 12 import javax.swing.JComponent; 13 14 public class Yanzhencode extends JComponent implements MouseListener { 15 16 private String codes; //自動生成的驗證碼 17 18 private int width, height = 40; //設置驗證碼高度、寬度 19 20 private int codesLength = 4; //設置代碼長度 21 22 private Random random = new Random(); //生成數字的方法 23 24 public Yanzhencode() { 25 width = this.codesLength * 16 + (this.codesLength - 1) * 10; //根據驗證碼長度設置寬度 26 setPreferredSize(new Dimension(width, height)); //設置背景大小 27 setSize(width, height); //設置驗證碼長度和寬度 28 this.addMouseListener(this); 29 setToolTipText("點擊可更換驗證碼"); 30 } 31 //得到生成的驗證碼 32 public int getCodesLength() { 33 return codesLength; 34 } 35 36 37 //設置驗證碼的長度 38 public void setCodesLength(int codeLength) { 39 if(codesLength < 4) { 40 this.codesLength = 4; 41 } else { 42 this.codesLength = codeLength; 43 } 44 45 } 46 47 public String getCode() { 48 return codes; 49 } 50 51 52 //讓驗證碼產生隨機的顏色 53 public Color getRandColor(int min, int max) { 54 55 if (min > 255) 56 min = 255; 57 if (max > 255) 58 max = 255; 59 int red = random.nextInt(max - min) + min; 60 int green = random.nextInt(max - min) + min; 61 int blue = random.nextInt(max - min) + min; 62 return new Color(red, green, blue); 63 } 64 // 設置驗證碼具體的數字或字母是什么 65 protected String generateCode() { 66 char[] codes = new char[this.codesLength]; 67 for (int i = 0, len = codes.length; i < len; i++) { 68 if (random.nextBoolean()) { 69 codes[i] = (char) (random.nextInt(10) + 48); 70 } else { 71 codes[i] = (char) (random.nextInt(26) + 97); 72 } 73 } 74 this.codes = new String(codes); 75 return this.codes; 76 } 77 78 79 @Override 80 protected void paintComponent(Graphics g) { 81 super.paintComponent(g); 82 if(this.codes == null || this.codes.length() != this.codesLength) { //判斷生成的驗證碼是否為空或超出長度 83 this.codes = generateCode(); 84 } 85 width = this.codesLength * 16 + (this.codesLength - 1) * 10; 86 super.setSize(width, height); //接口使用,驗證碼字體大小 87 super.setPreferredSize(new Dimension(width, height));//接口使用,驗證碼背景大小 88 Font mFont = new Font("Arial", Font.BOLD | Font.ITALIC, 25); //設置字體和字體大小 89 g.setFont(mFont); //設置對象 90 //繪制出驗證碼的背景的矩形輪廓 91 Graphics2D g2d = (Graphics2D) g; 92 g2d.setColor(getRandColor(200, 250)); 93 g2d.fillRect(0, 0, width, height); 94 g2d.setColor(getRandColor(180, 200)); 95 g2d.drawRect(0, 0, width - 1, height - 1); 96 //繪制出驗證碼背景的線 97 int i = 0, len = 150; 98 for (; i < len; i++) { 99 int x = random.nextInt(width - 1); 100 int y = random.nextInt(height - 1); 101 int x1 = random.nextInt(width - 10) + 10; 102 int y1 = random.nextInt(height - 4) + 4; 103 g2d.setColor(getRandColor(180, 200)); 104 g2d.drawLine(x, y, x1, y1); 105 } 106 107 108 109 //繪制出驗證碼的具體字母 110 i = 0; len = this.codesLength; 111 FontMetrics fm = g2d.getFontMetrics(); 112 int base = (height - fm.getHeight())/2 + fm.getAscent(); 113 for(;i<len;i++) { 114 int b = random.nextBoolean() ? 1 : -1; 115 g2d.rotate(random.nextInt(10)*0.01*b); 116 g2d.setColor(getRandColor(20, 130)); 117 g2d.drawString(codes.charAt(i)+"", 16 * i + 10, base); 118 } 119 } 120 121 //下一個驗證碼 122 public void nextCode() { 123 generateCode(); 124 repaint(); 125 } 126 127 @Override 128 public void mouseClicked(MouseEvent e) { 129 130 nextCode(); 131 } 132 133 @Override 134 public void mousePressed(MouseEvent e) { 135 // TODO Auto-generated method stub 136 137 } 138 139 @Override 140 public void mouseReleased(MouseEvent e) { 141 // TODO Auto-generated method stub 142 143 } 144 145 @Override 146 public void mouseEntered(MouseEvent e) { 147 // TODO Auto-generated method stub 148 149 } 150 151 @Override 152 public void mouseExited(MouseEvent e) { 153 // TODO Auto-generated method stub 154 155 } 156 }
2.驗證碼實現效果
點擊驗證碼圖片后,驗證碼會更換
版權聲明:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。