`
where
  • 浏览: 80801 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

实现完整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过程三部曲:
创建组件————指定布局————响应事件
创建组件:创建组成界面的各种元素。比如上面代码中的创建按钮,文本框等。
指定布局:根据具体需要排列组件的位置。比如上面我们用到的流式布局。
响应事件:定义图形用户界面的时间和各界面元素对不同事件的相应,从而实现图形用户界面域用户的交互功能。如我们上面鼠标点击登录,程序作出响应。
1
12
分享到:
评论
6 楼 jn615 2012-07-24  
都拿QQ说事
5 楼 yuhui0531 2012-07-24  
亲,无用的注释太多了
4 楼 where 2012-07-24  
表示我farmer了刚注意到,感谢提醒,以后方便多了,省去了word排版,而且word排版后程序不亲切了,这点我也意识到了。以后开始用。。。 : 
3 楼 su1216 2012-07-24  
where 写道
这个确实可以,主要博文是在word中写的,写完就直接贴过来了,这点我以后注意,可以一起把程序运行结果也截图下来。以后注意,我粗糙了。。。。



javaeye有草稿箱的。。
2 楼 where 2012-07-24  
这个确实可以,主要博文是在word中写的,写完就直接贴过来了,这点我以后注意,可以一起把程序运行结果也截图下来。以后注意,我粗糙了。。。。
1 楼 moshowgame 2012-07-24  
可以把项目源码贴上来的

相关推荐

    JAVA上百实例源码以及开源项目源代码

     一个Java+ajax写的登录实例,附有JAVA源文件,JAVA新手朋友可以学习一下。 JAVA+JSP的聊天室 8个目标文件 简单 JavaScript万年历 显示出当前时间及年份,还可以选择年份及月份和日期 Java编写的HTML浏览器 一个...

    java源码包---java 源码 大量 实例

     一个Java+ajax写的登录实例,附有JAVA源文件,JAVA新手朋友可以学习一下。 JAVA+JSP的聊天室 8个目标文件 简单 JavaScript万年历 显示出当前时间及年份,还可以选择年份及月份和日期 Java编写的HTML浏览器 一...

    java源码包2

     一个Java+ajax写的登录实例,附有JAVA源文件,JAVA新手朋友可以学习一下。 JAVA+JSP的聊天室 8个目标文件 简单 JavaScript万年历 显示出当前时间及年份,还可以选择年份及月份和日期 Java编写的HTML浏览器 ...

    JAVA上百实例源码以及开源项目

     一个Java+ajax写的登录实例,附有JAVA源文件,JAVA新手朋友可以学习一下。 JAVA+JSP的聊天室 8个目标文件 简单 JavaScript万年历 显示出当前时间及年份,还可以选择年份及月份和日期 Java编写的HTML浏览器 一个...

    java源码包3

     一个Java+ajax写的登录实例,附有JAVA源文件,JAVA新手朋友可以学习一下。 JAVA+JSP的聊天室 8个目标文件 简单 JavaScript万年历 显示出当前时间及年份,还可以选择年份及月份和日期 Java编写的HTML浏览器 ...

    java源码包4

     一个Java+ajax写的登录实例,附有JAVA源文件,JAVA新手朋友可以学习一下。 JAVA+JSP的聊天室 8个目标文件 简单 JavaScript万年历 显示出当前时间及年份,还可以选择年份及月份和日期 Java编写的HTML浏览器 ...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录 一个Java+ajax写的登录实例,附有JAVA源文件,JAVA新手朋友可以学习一下...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录 一个Java+ajax写的登录实例,附有JAVA源文件,JAVA新手朋友可以学习一下...

    windows上计算器详细代码及注释

    windows上的计算器能实现的功能都能实现,包括了标准型、科学型、程序员型的都分别实现,并附有详细的代码,以及swing界面的生成

Global site tag (gtag.js) - Google Analytics