java圖形化界面實(shí)現(xiàn)登錄窗口
登錄窗口一般很常見(jiàn),現(xiàn)在讓我們自己也來(lái)寫(xiě)一個(gè)吧!
PS:很多import是重復(fù)的,是因?yàn)槲沂欠至藥讉€(gè)類(lèi)寫(xiě)的,必須單獨(dú)導(dǎo)入
//模擬qq登錄窗口 import java.awt.*; import java.io.*; import java.awt.event.*; import javax.swing.*; public class QQGUI extends JFrame implements ActionListener{ private JLabel userLa; private JLabel pwdLa; private JLabel verCodeLa;//驗(yàn)證碼 private JTextField userTxt; private JPasswordField pwdTxt; private JTextField verCodeTxt;//驗(yàn)證碼 private JButton sureBt; private JButton quitBt; private Mypanel mp; //構(gòu)造方法 public QQGUI() { Init(); } public void Init() { Frame frame = new Frame("QQ登錄"); //創(chuàng)建出控件對(duì)象(因?yàn)樯厦嬷皇锹暶鞒鰜?lái),并沒(méi)有給出實(shí)際的空間) //用戶(hù)文本 userLa = new JLabel(); userLa.setText("用戶(hù)名:"); userLa.setSize(60, 50); userLa.setLocation(100, 80); //密碼文本 pwdLa = new JLabel(); pwdLa.setText("密碼:"); pwdLa.setSize(50, 50); pwdLa.setLocation(100, 120); //用戶(hù)輸入框 userTxt = new JTextField(); userTxt.setSize(100, 20); //this.setSize(width, height) userTxt.setLocation(170, 95); //密碼輸入框 pwdTxt = new JPasswordField(); pwdTxt.setSize(100, 20); pwdTxt.setLocation(170, 135); //確認(rèn)按鈕 sureBt = new JButton("登錄"); sureBt.setSize(60, 25); sureBt.setLocation(135, 260); //退出按鈕 quitBt = new JButton("退出"); quitBt.setSize(60, 25); quitBt.setLocation(240, 260); //驗(yàn)證碼文本 verCodeLa = new JLabel(); verCodeLa.setText("驗(yàn)證碼:"); verCodeLa.setSize(60, 50); verCodeLa.setLocation(100,165); //驗(yàn)證碼文本框 verCodeTxt = new JTextField(); verCodeTxt.setSize(100, 20); verCodeTxt.setLocation(170, 180); //驗(yàn)證碼 mp = new Mypanel(); mp.setSize(100, 30); mp.setLocation(280, 175); //登錄方式選擇框 JComboBox xlk=new JComboBox(); xlk.setSize(60, 20); xlk.setLocation(250, 220); xlk.addItem("在線"); xlk.addItem("隱身"); xlk.addItem("離開(kāi)"); this.setLayout(null); this.setSize(500, 400); this.add(userLa); this.add(pwdLa); this.add(userTxt); this.add(pwdTxt); this.add(sureBt); this.add(quitBt); this.add(verCodeLa); this.add(verCodeTxt); this.add(mp); this.add(xlk); sureBt.addActionListener(this); quitBt.addActionListener(this); this.setVisible(true); } //具體事件的處理 public void actionPerformed(ActionEvent e) { //獲取產(chǎn)生事件的事件源強(qiáng)制轉(zhuǎn)換 JButton bt = (JButton)e.getSource(); //獲取按鈕上顯示的文本 String str = bt.getText(); if(str.equals("登錄")) { if(!CheckIsNull()) { //獲取用戶(hù)所輸入的用戶(hù)名 String user = userTxt.getText().trim(); //獲取用戶(hù)所輸入的密碼 String pwd = pwdTxt.getText().trim(); if(checkUserAndPwd(user,pwd)) { //隱藏當(dāng)前登錄窗口 this.setVisible(false); //驗(yàn)證成功創(chuàng)建一個(gè)主窗口 MainFrame frame = new MainFrame(); } else { //如果錯(cuò)誤則彈出一個(gè)顯示框 JOptionPane pane = new JOptionPane("用戶(hù)或密碼錯(cuò)誤"); JDialog dialog = pane.createDialog(this,"警告"); dialog.show(); } } } else { //調(diào)用系統(tǒng)類(lèi)中的一個(gè)正常退出 System.exit(0); } } private boolean CheckIsNull() { boolean flag = false; if(userTxt.getText().trim().equals(" ")) { flag = true; } else { if(pwdTxt.getText().trim().equals(" ")) { flag = true; } } return flag; } private boolean checkUserAndPwd(String user,String pwd) { boolean result = false; try { FileReader file = new FileReader("D:\\Workspaces\\MyEclipse 8.5\\testGUI.txt"); BufferedReader bre = new BufferedReader(file); String str = bre.readLine(); while(str!=null) { String[] strs = str.split(","); if(strs[0].equals(user)) { if(strs[1].equals(pwd)) result = true; } str = bre.readLine(); } file.close(); }catch(Exception ex) { System.out.print(""); } return result; } } //MainFrame類(lèi) import javax.swing.*; public class MainFrame extends JFrame { public MainFrame() { this.setSize(300, 300); this.setVisible(true); } } //驗(yàn)證碼的生成 import java.awt.*; import java.util.*; public class Mypanel extends Panel { public void paint(Graphics g) { int height = 50; int width = 90; //驗(yàn)證碼框背景顏色 g.setColor(Color.LIGHT_GRAY); //填充驗(yàn)證碼背景 g.fillRect(0, 0, width, height); g.setColor(Color.BLACK); g.drawRect(0, 0, width-1, height-1); Random r = new Random(); //設(shè)置干擾點(diǎn) for(int i = 0;i<100;i++) { int x = r.nextInt(width)-1; int y = r.nextInt(height)-1; g.drawOval(x, y, 2, 2); } g.setFont(new Font("黑體",Font.BOLD,20));//設(shè)置驗(yàn)證碼字體以及大小 g.setColor(Color.RED);//設(shè)置驗(yàn)證碼字體顏色 //生成隨機(jī)驗(yàn)證碼 char[] tmp = ("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ").toCharArray(); StringBuilder sb = new StringBuilder(); for(int i = 0;i<4;i++) { int pos = r.nextInt(tmp.length); char c = tmp[pos]; sb.append(c + " "); } g.drawString(sb.toString(), 10, 15);//寫(xiě)入驗(yàn)證碼 } } //下拉框的實(shí)現(xiàn) import java.awt.*; import java.awt.event.*; import javax.swing.*; public class xialakuang extends JFrame { private JComboBox comboBox;//定義一個(gè)組合框 public void xia () { //JPanel panel = new JPanel();//創(chuàng)建一個(gè)JPanel面板 comboBox = new JComboBox(); comboBox.addItem("在線"); comboBox.addItem("隱身"); comboBox.addItem("離開(kāi)"); this.add(comboBox); //this.add(panel); this.setSize(200, 100); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); } } //測(cè)試 public class testQQGUI { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub QQGUI frame = new QQGUI(); } }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot集成JPA持久層框架,簡(jiǎn)化數(shù)據(jù)庫(kù)操作
JPA(Java Persistence API)意即Java持久化API,是Sun官方在JDK5.0后提出的Java持久化規(guī)范。主要是為了簡(jiǎn)化持久層開(kāi)發(fā)以及整合ORM技術(shù),結(jié)束Hibernate、TopLink、JDO等ORM框架各自為營(yíng)的局面。JPA是在吸收現(xiàn)有ORM框架的基礎(chǔ)上發(fā)展而來(lái),易于使用,伸縮性強(qiáng)。2021-06-06Java實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)(使用數(shù)據(jù)庫(kù))
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)學(xué)生信息管理系統(tǒng),使用數(shù)據(jù)庫(kù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01Java 動(dòng)態(tài)生成類(lèi)和實(shí)例, 并注入方法操作示例
這篇文章主要介紹了Java 動(dòng)態(tài)生成類(lèi)和實(shí)例, 并注入方法操作,結(jié)合實(shí)例形式分析了Java 動(dòng)態(tài)生成類(lèi)和實(shí)例以及動(dòng)態(tài)注入相關(guān)操作技巧,需要的朋友可以參考下2020-02-02java ant包中的org.apache.tools.zip實(shí)現(xiàn)壓縮和解壓縮實(shí)例詳解
這篇文章主要介紹了java ant包中的org.apache.tools.zip實(shí)現(xiàn)壓縮和解壓縮實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-04-04SpringBoot--Banner的定制和關(guān)閉操作
這篇文章主要介紹了SpringBoot--Banner的定制和關(guān)閉操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2018-05-05深入學(xué)習(xí)Java 動(dòng)態(tài)代理
Java 動(dòng)態(tài)代理機(jī)制的出現(xiàn),使得 Java 開(kāi)發(fā)人員不用手工編寫(xiě)代理類(lèi),只要簡(jiǎn)單地指定一組接口及委托類(lèi)對(duì)象,便能動(dòng)態(tài)地獲得代理類(lèi)。下面小編和大家來(lái)一起學(xué)習(xí)一下吧2019-05-05Springboot中@ConfigurationProperties輕松管理應(yīng)用程序的配置信息詳解
通過(guò)@ConfigurationProperties注解,可以將外部配置文件中的屬性值注入到JavaBean中,簡(jiǎn)化了配置屬性的讀取和管理,這使得SpringBoot應(yīng)用程序中配置文件的屬性值可以映射到POJO類(lèi)中,實(shí)現(xiàn)類(lèi)型安全的屬性訪問(wèn),此方法避免了手動(dòng)讀取配置文件屬性的需要2024-10-10SpringBoot上傳文件到本服務(wù)器 目錄與jar包同級(jí)問(wèn)題
這篇文章主要介紹了SpringBoot上傳文件到本服務(wù)器 目錄與jar包同級(jí)問(wèn)題,需要的朋友可以參考下2018-11-11