標籤:buffer font mouse def char lis 添加 問題 輸出
1、設計思想
利用random的隨機產生數字,利用for迴圈控制隨機數位個數來控制驗證碼的輸出。
利用JFrame實現布局的管理,對登入框內容的位置進行管理。
2、流程圖
3、原始碼
denglu類
import javax.swing.*;
import java.awt.*;
import javax.swing.JFrame;
public class denglu extends JFrame{
JTextField jTextField; //定義文字框組件
JPasswordField jPasswordField; //定義密碼框組件
JTextField jYanzhengField;//定義驗證碼架構組件
JLabel jl1,jl2,jl3; //使用者名稱 密碼
JButton jb1,jb2; //按鈕
JPanel jp1,jp2,jp3,jp4,jp5; //邊框
public denglu(){
// 建立組件
jTextField=new JTextField(10);
jPasswordField=new JPasswordField(10);
jYanzhengField=new JTextField(5);
jb1=new JButton("登入");
jb2=new JButton("快速註冊");
jl1=new JLabel("登入名稱");
jl2=new JLabel("密 碼");
jl3=new JLabel("驗證碼");
jp1=new JPanel();
jp2=new JPanel();
jp3=new JPanel();
jp4=new JPanel();
//設定布局
JFrame jf = new JFrame();
jf.setLayout(new GridLayout(5,2));
jp1.add(jl1);
jp1.add(jTextField);// 第一塊面板 文字框和使用者名稱
jp2.add(jl2);
jp2.add(jPasswordField);// 第二塊面板 文字框和密碼
jp3.add(jl3);
jp3.add(jYanzhengField);// 第三塊面板 文字框和驗證碼
jp4.add(jb1);
jp4.add(jb2);// 第四塊面板 登入 快速註冊
jf.add(jp1);
jf.add(jp2);
jf.add(jp3);
jf.add(jp4);
//將四塊面板添加到登入框上
//設定架構
jf.setTitle("登入");
jf.setSize(400, 300);
jf.pack();
Dimension screen = getToolkit().getScreenSize();
jf.setLocation((screen.width-getWidth())/2, (screen.height-getHeight())/2);
jf.setDefaultCloseOperation(EXIT_ON_CLOSE);
jf.setVisible(true);
}
}
yanzheng類
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Random;
import javax.swing.JFrame;
public class yanzheng extends JFrame {
private static Random random = new Random();
private String code = "";//儲存驗證碼
public yanzheng(){//初始化表單資訊
super("驗證碼");
setVisible(true);
setBounds((Toolkit.getDefaultToolkit().getScreenSize().width-300)/2, (Toolkit.getDefaultToolkit().getScreenSize().height-300)/2, 300, 200);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public String randomcode(){//獲得驗證碼
String code="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
Random random=new Random();
StringBuffer s=new StringBuffer();
int num =random.nextInt(62);
sb.append(code.charAt(num));
return s.toString();
}
public void checkcode(Graphics a){// 設定驗證碼
drawCode(a);
}
public void drawCode(Graphics a){//設定驗證碼內容
for(int i=0;i<6;i++){
a.setFont(new Font("宋體",Font.BOLD,20));
a.drawString(randomcode(), 50+(i*12),70);
}
}
public void paint(Graphics a) {
checkcode(a);
}
// 實現
public static void main(String[] args) {
// TODO Auto-generated method stub
new yanzheng();
new denglu();
}
}
4、程式
5、實驗總結
驗證碼:
利用random產生的隨機數只能是int類型,不能是字元類型。
在繪製驗證碼圖片時,用Graphics類傳輸paint繪畫隨機數字。
登入介面設計:
用JFrame的布局管理
標籤組件:JLabel 按鈕組件:JButton
字型設定:Font font=new Font("隸書",Font.ITALIC+Font.BOLD,28);
GridLayout布局管理器是以表格形式進行管理的,在使用此布局管理器時必須設定顯示的行數與列數
JFrame類是一個容器,允許程式員把其他組件添加到它裡面,把它們組織起來,並把它們呈現給使用者。 。
JFrame jf=new JFrame("");//進行執行個體化表單對象
使用Dimension類設定表單的大小:getSize()和setSize(Dimension size),分別用來獲得和設定方格的大小。
遇到的問題:用StringBuffer code="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";不能產生隨機字元型而是全部輸出
改為 String code="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
Random random=new Random();
StringBuffer s=new StringBuffer();
int num =random.nextInt(62);
s.append(code.charAt(num));
return sb.toString();
驗證能成功輸出
Java驗證碼程式