实现完整QQ登录+总结swing(附有完整代码,有需要的就拿去,学习在继续)

实现完整QQ登录+总结swing
//**
*开篇“废话”
最近几天断断续续在学swing,从一开始创建窗体,添加各种首字母为J的组件看效果,到试着做一个粗糙的QQ的界面实现了一些基本功能,但细节不够完美,也是由于当时“监听器”,“对象传递”等一些知识没有学习,现在swing知识大部分学了,站在现在的角度看那个QQ登录,觉得可以改进一些东西,由于我还想顺便结合QQ登录总结一下swing所以这篇博文可以看做上一个“从实现QQ登陆浅看swing的应用(希望对大家有帮助)”的一个升华,在那篇中提到的基础知识在这将不再赘述。也许这次改进后的登录仍不够完美,以后我掌握新知识仍会对这篇文章不妥之处修改,优化。QQ登录不会再创立新帖。最后对这两天关注where博客并提出宝贵意见的读者表示感谢,这将内化为where继续学习的动力。
提纲
1) 讲解优化的QQ登录
2) 归纳swing
一.“升级版QQ登录”
改进一下几点:
1) 密码输入框不应该用和用户名一样的JTextField类,正常情况下密码输入是不能显示的,当时忽略了这一点,应该用
JpasswordField。具体代码上的更改为:
//原来的
JTextField text_pass = new JTextField(10);
//更改后
JPasswordField text_pass = new JPasswordField(10);
2)为按钮添加监听器,具体方法一样,我在这选择给登录按钮加监听器。(监听器知识在“监听器的理解和使用”一文提到不再赘述)我们一起来看相应代码 ,我会通过注释详细解释这部分。
上代码:
//创建监听器对象
QQListener lis = new QQListener(text_name,text_pass,jf);
//把监听器对象添加到按钮上去
button_login.addActionListener(lis);
import java.awt.event.ActionEvent;
import javax.swing.*;
/**
* 事件监听器的类
* @author where
*
*/
public class QQListener implements java.awt.event.ActionListener{
//声明一个全局变量,用来存储传过来的对象
JTextField text_name;
JPasswordField text_pass;
JFrame jf;

//重载构造方法,用来传值
public QQListener(JTextField text_name,JPasswordField text_pass,JFrame jf){
this.text_name = text_name;
this.text_pass = text_pass;
this.jf = jf;
}
/**
* 实现接口中的方法
*/
public void actionPerformed(ActionEvent e) {
String command = e.getActionCommand();
System.out.println("command="+command);
if(command.equals("login")){
//1.获取用户名和密码
String user = text_name.getText();
char[] c = text_pass.getPassword();
String pass = new String(c);
System.out.println(user);
System.out.println(pass);
//2.用户名和密码进行匹配
//3.后续操作
if(user.equals("zhangwei")&&pass.equals("1234")){
DrawBoard draw = new DrawBoard();
draw.showUI();
jf.dispose();
}else{
javax.swing.JOptionPane.showConfirmDialog(null, "登陆失败", "警告", 2);
}
}else if(command.equals("注册")){
//这部分可以写注册后的方法
}else if(command.equals("多帐号")){

}

}
}
3) 改后的QQ登录完整代码:

package lainxi;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

import lainxi.QQListener;

public class QQ登录界面完整版 {/**
* 主函数
*
* @param args
*/
public static void main(String[] a) {
// 创建一个窗体对象
JFrame jf = new JFrame();
// 设置标题
jf.setTitle("QQ2012");
// 设置窗体的大小
jf.setSize(400, 300);
// 设置窗体关闭时退出程序
jf.setDefaultCloseOperation(3);
// 设置窗体不能改变大小
// jf.setResizable(false);
// 创建流式布局管理器
java.awt.FlowLayout fl = new java.awt.FlowLayout();
// 给窗体添加布局管理器
jf.setLayout(fl);

// 创建图像对象
ImageIcon icon = new ImageIcon("image/2.jpg");
JLabel l = new javax.swing.JLabel(icon);
java.awt.Dimension men = new java.awt.Dimension(400, 150);
l.setPreferredSize(men);
jf.add(l);

// 创建一个标签类
JLabel label_name = new JLabel("用户名:");
// 把标签添加到窗体上去
jf.add(label_name);
// 创建一个文本输入框对象
JTextField text_name = new JTextField(10);
// 把文本框对象添加到窗体上
jf.add(text_name);
// 密码标签
JLabel label_pass = new JLabel("密码:");
// 密码输入框
JPasswordField text_pass = new JPasswordField(10);
jf.add(label_pass);
jf.add(text_pass);

// 创建复选框
JCheckBox box = new JCheckBox(
"记住密码 ");
jf.add(box);
JCheckBox box_1 = new JCheckBox("自动登录 ");
jf.add(box_1);
// 创建按钮对象
JButton button_login = new JButton("登陆");
button_login.setActionCommand("login");
jf.add(button_login);
JButton button_regist = new JButton("注册");
jf.add(button_regist);
JButton button_dzh = new JButton("多帐号");
jf.add(button_dzh);

// 设置窗体可见
jf.setVisible(true);
//创建监听器对象
QQListener lis = new QQListener(text_name,text_pass,jf);
//把监听器对象添加到按钮上去
button_login.addActionListener(lis);
button_regist.addActionListener(lis);
button_dzh.addActionListener(lis);

}
}

package lainxi;

import java.awt.event.ActionEvent;

import javax.swing.*;

/**
* 事件监听器的类
* @author where
*
*/
public class QQListener implements java.awt.event.ActionListener{
//声明一个全局变量,用来存储传过来的对象
JTextField text_name;
JPasswordField text_pass;
JFrame jf;

//重载构造方法,用来传值
public QQListener(JTextField text_name,JPasswordField text_pass,JFrame jf){
this.text_name = text_name;
this.text_pass = text_pass;
this.jf = jf;
}
/**
* 实现接口中的方法
*/
public void actionPerformed(ActionEvent e) {
String command = e.getActionCommand();
System.out.println("command="+command);
if(command.equals("login")){
//1.获取用户名和密码
String user = text_name.getText();
char[] c = text_pass.getPassword();
String pass = new String(c);
System.out.println(user);
System.out.println(pass);
//2.用户名和密码进行匹配
//3.后续操作
if(user.equals("zhangwei")&&pass.equals("1234")){
DrawBoard draw = new DrawBoard();
draw.showUI();
jf.dispose();
}else{
javax.swing.JOptionPane.showConfirmDialog(null, "登陆失败", "警告", 2);
}
}else if(command.equals("注册")){

}else if(command.equals("多帐号")){

}

}
}
package lainxi;

import javax.swing.JFrame;

public class DrawBoard {
public void showUI() {
// 创建一个窗体对象
JFrame jf = new JFrame();
// 设置标题
jf.setTitle("QQ2012");
// 设置窗体的大小
jf.setSize(400, 300);
// 设置窗体关闭时退出程序
jf.setDefaultCloseOperation(3);
// 设置窗体不能改变大小
// jf.setResizable(false);
// 创建流式布局管理器
java.awt.FlowLayout fl = new java.awt.FlowLayout();
// 给窗体添加布局管理器
jf.setLayout(fl);
jf.setVisible(true);

}
}
二.Swing总结
Swing是第二代GUI(图形用户界面)类库
Swing的特点:
1. 不依赖系统支持,提供更好的跨平台性,较实用性更强
2. 采用“模型—视图—控制器”设计模式
3. 可插入外观感觉
Swing组件
顶层容器:如Window,其重要子类:JFrame
容器类
非顶层容器:如JPanel和JScrollPane等
组件

非容器类:如JButton JLabel等
组件:就是JAVA中构成图形用户界面的各种元素,也就是类。
容器:容器本身也是组件,但容器中可以包含其他组件,也可以包含其他容器。
顶层容器:可以独立的窗口。
非顶层容器:不是独立窗口,必须位于顶层容器内。
Swing实现GUI过程三部曲:
创建组件————指定布局————响应事件
创建组件:创建组成界面的各种元素。比如上面代码中的创建按钮,文本框等。
指定布局:根据具体需要排列组件的位置。比如上面我们用到的流式布局。
响应事件:定义图形用户界面的时间和各界面元素对不同事件的相应,从而实现图形用户界面域用户的交互功能。如我们上面鼠标点击登录,程序作出响应。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值