`
fuziyi0405
  • 浏览: 4544 次
社区版块
存档分类
最新评论

QQ登录界面模仿和事件监听(下)

阅读更多
我们到了QQ登录界面模仿这个环节了。

当开始做一个小小的程序的时候,就发现事件监听的无处不在。因为如果让一个程序有能动性,人使用时根据需要程序也能做出相应的反应,很多时候都要使用事件监听。

(当时俺的QQ还木有升级,所以之前先模仿2013的版本。嘿嘿。觉得还是新版本好看,接下去应该要改改美观。但是,我们需要的组件是一样的。)

先上图:
这个当然是后来我QQ升级以后2014版的界面,个人觉得QQ终于好看了= =。



这个是QQ升级前我模仿的版本。先不管外观。它们的布局是一样的。



要做一个界面,得先做点热身准备工作。弄个大小一样的背景图啦。按钮的图啦,(图这里我放到同一个包下了)。

通过这个小的程序你可以熟练
事件监听的用法;
JFrame内的布局:FLowLayout,BorderLayout的使用;
自己找一些能让美观看起来好一些的方法。比如给你的组件设置setBorder(null);-->去掉丑陋的边框。

事件监听的使用在我的QQ登录界面模仿和事件监听(上)里面有讲。当时第一次接触监听,自己敲代码还是遇到了很多的问题的,好几次报错空指针。

加事件监听要问自己这样3个问题:
1.事件监听需要的参数传过来了吗?
2.在事件源前给继承监听接口的那个类实例化并且给事件源添加方法了吗?
3.若用到继承监听接口的那个类里自己新写的其他方法,方法给实现了吗?(在这个例子中我们还没用到在这个问题~)

(做成前先自己监听方法里用System.out.Println(“这里随便打点什么啊~”)来试验是不是空指针:
我这里是
public void actionPerformed(ActionEvent e) {
			
			System.out.println("====>>>>");
        ......
)

上代码:
比如说给那个“登录”按钮加监听方法:
先要传参来着:
QQFrame QQ;
	JComboBox jcb;
    JPasswordField jcb1;
    //实现接口中的抽象方法重写接口中的抽象方法
	   public QQlistener (QQFrame QQ,JComboBox jcb,JPasswordField jcb1){
		   this.QQ=QQ;
		   this.jcb=jcb;
		   this.jcb1=jcb1;	   
	   }

再回去看你的主程序里这样写:
//创建一个事件处理类的对象
	QQlistener l2 =new QQlistener(this, jcb, jcb1);
	//给事件源jbulogin添加动作监听器方法
	jbulogin.addActionListener(l2);

注意注意啊,在上面代码创建一个事件处理类的时候,后边括号里面一定写的是,你这个程序需要用到的那几个“实参”,是实参哦--->记住这个格式,当时我就是这里弄错了。

__________________________________________________________________________________
接下来讲一下布局的使用:
观察QQ登录界面的布局要用边框布局,JFrame默认的布局就是边框布局,就不用定义了。
BorderLayout的NORTH区域、CENTER区域用了流式布局。
(NORTH区域的那三个按钮、CENTER区域的文本框,标签需要流式排列)
注意BorderLayout的北和南只有高度没有宽度,西和东则只有宽度没有高度,被剩下的就是中间区域。
就像这样:

所以当你设置北部区域时,宽度给什么值都无所谓,其他区域同理。
我们说完了主要的布局了。我们这里需要所有的布局区域,每个区域写一个方法,然后主函数再依次调用这些方法,这样比较整齐。
//调用添加窗体背景图的方法
	bj();
	//调用创建北边区域的方法
	North();
	//调用创建西边区域的方法
	West();
	//调用创建中部区域的方法
    Center();
	//调用创建南边区域的方法
	South();

自己设置具体每个控件的大小、位置的时候,需要自己用截图工具去截图看大小(QQ的截图是能看到大小的),这个自己算哦。

需要稍微讲一下的是背景的添加。因为以后好多也要添加背景,需要先加载图片,再用Label这个组件显示它。加载图片这个会用到很多的。接下来背景的显示上代码(注释里详细写了步骤):
private void bj(){
    //使用ImageIcon来加载图片(只加载 不会显示)
	ImageIcon image =new ImageIcon(this.getClass().getResource("bj.png"));
	//创建JLabel的对象,用来显示图片
	JLabel bj=new JLabel(image);
	//设置标签显示的起始位置和高度宽度
	bj.setBounds(0, 0,image.getIconWidth(), image.getIconHeight());
	//将bj标签对象添加到JLayoutedPane的Default层上
	this.getLayeredPane().add(bj ,new Integer(Integer.MIN_VALUE));
	//获取窗体内容面板对象
	JPanel con=(JPanel)this.getContentPane();
	//设置ContentPane为透明的
	con.setOpaque(false);	
}

讲毕。嘿嘿^^。上所有代码。
主类
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
/*主函数*/
@SuppressWarnings("serial")
public class QQFrame extends JFrame{
	
	//程序入口主函数
   public static void main(String[] args){
	   //实例化QQFrame类的的对象
	   QQFrame QQ=new QQFrame();
	   //调用初始化界面的方法
	   QQ.intUI();                 
   }

   @SuppressWarnings("rawtypes")
JComboBox jcb=new JComboBox();
   JPasswordField jcb1=new JPasswordField();
/*初始化界面方法*/
public void intUI()
{

	this.setTitle("QQFrame");	//设置窗体的标题
	this.setSize(377,292);//设置窗体的大小
	this.setLocationRelativeTo(null);//居中显示
	this.setResizable(false);//设置禁止调整窗体的大小
	this.setDefaultCloseOperation(3);//关闭窗体时,退出程序
	this.setUndecorated(true);
	//this.setLayeredPane(new BorderLayout());//设置布局 方式,JFram默认的布局就是边框布局
	
	//调用添加窗体背景图的方法
	bj();
	//调用创建北边区域的方法
	North();
	//调用创建西边区域的方法
	West();
	//调用创建中部区域的方法
    Center();
	//调用创建南边区域的方法
	South();
	this.setVisible(true);
	}
//private void setLayeredPane(BorderLayout borderLayout) {
	// TODO 自动生成的方法存根
	
//}

/*添加窗体背景图的方法,改成私有的*/
private void bj(){
    //使用ImageIcon来加载图片(只加载 不会显示)
	ImageIcon image =new ImageIcon(this.getClass().getResource("bj.png"));
	//创建JLabel的对象,用来显示图片
	JLabel bj=new JLabel(image);
	//设置标签显示的起始位置和高度宽度
	bj.setBounds(0, 0,image.getIconWidth(), image.getIconHeight());
	//将bj标签对象添加到JLayoutedPane的Default层上
	this.getLayeredPane().add(bj ,new Integer(Integer.MIN_VALUE));
	//获取窗体内容面板对象
	JPanel con=(JPanel)this.getContentPane();
	//设置ContentPane为透明的
	con.setOpaque(false);
	
}

private void North(){
	//实例化一个JLabel的对象
	JPanel north = new JPanel();
	//设置标签的大小,用盒子把宽度高度装起来
	north.setPreferredSize(new Dimension(0,110));
	north.setLayout(new FlowLayout(FlowLayout.RIGHT));   
	//添加一个按钮
		ImageIcon image1=new ImageIcon(this.getClass().getResource("small.png"));
		ImageIcon image2=new ImageIcon(this.getClass().getResource("big.png"));
		ImageIcon image3=new ImageIcon(this.getClass().getResource("close.png"));
		JButton small=new JButton(image1);
		JButton big=new JButton(image2);
		JButton close=new JButton(image3);
		
		small.setPreferredSize(new Dimension (30,20));
		small.setActionCommand("small");
		big.setPreferredSize(new Dimension (28,18));
		big.setActionCommand("big");
		close.setPreferredSize(new Dimension (30,20));
		close.setActionCommand("close");
		//创建一个事件处理类的对象
		QQlistener l =new QQlistener(this, jcb, jcb1);
		//给事件源small添加动作监听器方法
		small.addActionListener(l);
	
		//给事件源big添加动作监听器方法
		big.addActionListener(l);
				
		//给事件源close添加动作监听器方法
		close.addActionListener(l);
		
		//将按钮添加到north面板上
		north.add(small);
		north.add(big);
		north.add(close);
		
    //将north添加到窗体的北边  
	north.setOpaque(false);//标签默认就是透明的
	this.add(north,BorderLayout.NORTH);
}
//创建西边区域的方法
private void West(){
	//实例化一个JPanel的容器
	JPanel West= new JPanel();
	//设置west的大小
	West.setPreferredSize(new Dimension(110,0));
	//JPanel默认的布局方式是剧中显示,这是JPanel的布局方式为流式布局靠右显示
	West.setLayout(new FlowLayout(FlowLayout.RIGHT));
	
	
	//使用ImageIcon来加载图片(只加载 不会显示)
		ImageIcon image =new ImageIcon(this.getClass().getResource("touxiang.png"));
	//实例化一个JLabel的对象
	JLabel jiaimage = new JLabel(image);
	//设置标签的大小,用盒子把宽度高度装起来
	West.setPreferredSize(new Dimension(110,0));
	//设置West面板为透明的
	West.setOpaque(false);
	//将jiaimage添加到West面板上
	West.add(jiaimage);
	//将west面板添加到窗体的西边
	this.add(West,BorderLayout.WEST);
}
@SuppressWarnings("rawtypes")
private void Center(){
	//实例化一个JPanel的容器
	JPanel Center= new JPanel();
	
	//JPanel默认的布局方式是剧中显示,这是JPanel的布局方式为流式布局靠左显示
	Center.setLayout(new FlowLayout(FlowLayout.LEFT));
	
	//创建一个JComboBox对象,添加到Center面板上
	
	jcb.setPreferredSize(new Dimension(186,26));
	jcb. setEditable(true);
	jcb.setBorder(null);
	Center.add(jcb);
	//创建一个JLabel对象,添加到Center面板上
	JLabel register=new JLabel("注册帐号");
	register.setPreferredSize(new Dimension(55,16));
	Center.add(register);
	
	
	jcb1.setPreferredSize(new Dimension(186,26));
	jcb1.setBorder(null);
	Center.add(jcb1);
	JLabel register1=new JLabel("找回密码");
	register1.setPreferredSize(new Dimension(55,16));
	Center.add(register1);
	//创建一个JCheckbox对象,添加到Center面板上
	JCheckBox remember=new JCheckBox("记住密码");
	Center.add(remember);
	remember.setOpaque(false);
	JCheckBox auto=new JCheckBox("自动登录");
	Center.add(auto);
	auto.setOpaque(false);
	//设置center面板为透明的
	Center.setOpaque(false);    
	//将west面板添加到窗体的西边
	this.add(Center,BorderLayout.CENTER);
}

//创建南边区域的方法
private void South(){
	//实例化一个JPanel的容器
	JPanel South= new JPanel();
	//设置South面板大小
	South.setPreferredSize(new Dimension(0,50));
	//创建south面板布局方式为null布局
	South.setLayout(null);
	//添加一个按钮
	JButton jbulogin=new JButton("登        录");
	
	jbulogin.setBackground(new Color(161, 213, 234));
	jbulogin.setBorder(null);
	jbulogin.setBounds(115, 7, 156, 35);
	jbulogin.setBorderPainted(false); 
	//将按钮添加到south面板上
	South.add(jbulogin);
	//设置South面板为透明的
	//South.setOpaque(true);

	//使用ImageIcon来加载图片(只加载 不会显示)
	ImageIcon image =new ImageIcon(this.getClass().getResource("picture.png"));
    //实例化一个JLabel的对象
    JLabel jiaimage1 = new JLabel(image);
    //设置标签的大小,用盒子把宽度高度装起来
    jiaimage1.setBounds(6, 6, 34, 34);
    //设置South面板为透明的
    jiaimage1.setOpaque(false);
    //将picture添加到South面板上
    South.add(jiaimage1);
    
  //使用ImageIcon来加载图片(只加载 不会显示)
  	ImageIcon image1 =new ImageIcon(this.getClass().getResource("picture2.png"));
      //实例化一个JLabel的对象
      JLabel jiaimage2 = new JLabel(image1);
      //设置标签的大小,用盒子把宽度高度装起来
      jiaimage2.setBounds(330, 6, 34, 34);
      //设置South面板为透明的
      jiaimage2.setOpaque(false);
      //将picture添加到South面板上
      South.add(jiaimage2);
      
	//将South面板添加到窗体的南边
	this.add(South,BorderLayout.SOUTH);
	
	//创建一个事件处理类的对象
	QQlistener l2 =new QQlistener(this, jcb, jcb1);
	//给事件源jbulogin添加动作监听器方法
	jbulogin.addActionListener(l2);
}
}

事件监听实现类
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JComboBox;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;

//QQ登录界面的登录功能实现
public class QQlistener implements ActionListener{
	private String s;
    QQFrame QQ;
	JComboBox jcb;
    JPasswordField jcb1;
    //实现接口中的抽象方法重写接口中的抽象方法
	   public QQlistener (QQFrame QQ,JComboBox jcb,JPasswordField jcb1){
		   this.QQ=QQ;
		   this.jcb=jcb;
		   this.jcb1=jcb1;	   
	   }
	
  
		public void actionPerformed(ActionEvent e) {
			
			System.out.println("====>>>>");
			
			String name = (String)jcb.getSelectedItem();
			
			String pass = new String(jcb1.getPassword());
			
			s=e.getActionCommand();
		//关闭窗体                                                                                                                                                                                                           
			if(s.equals("close")){
				System.out.println(QQ);
				QQ.dispose();	
				                              
//				qq.removeNotify();也可以~
			
			}
		//窗体最小化
			if(s.equals("small")){
			QQ.setExtendedState(Frame.ICONIFIED);
			}
		//登录框
			if(s.equals("登        录")){
				//如果输入了指定的账号和密码,显示“登录成功”
				if(name.equals("123") && pass.equals("123")){
					QQ.dispose();
					JOptionPane.showMessageDialog(null, "登录成功!");
					QQsuccess qq=new QQsuccess();
					qq.intUI();
				}
				else//如果没有输入对的账号和密码,显示“请输入正确的账号和密码”
					JOptionPane.showMessageDialog(null, "请输入正确的账号和密码!");
			}
			
		}								

}

接下去也可以尝试其他功能,比如说点注册帐号,找回密码时候弹到相应的页面,头像区域右下角的状态图标下拉栏。敬请期待以后的完善版本。 ^ ^ 。
  • 大小: 16.8 KB
  • 大小: 105.1 KB
  • 大小: 12.9 KB
0
0
分享到:
评论

相关推荐

    android高仿QQ登陆界面Demo

    本文将深入探讨如何实现“android高仿QQ登陆界面Demo”,它是一款完全模仿最新QQ登录界面的UI设计,并包含部分逻辑功能。这款Demo对于那些热衷于UI设计和Android开发的朋友们来说,是一个极好的学习和参考资源。 ...

    模仿QQ游戏登陆界面

    在本文中,我们将深入探讨如何模仿QQ游戏的登录界面,包括UI设计、前端开发、后端通信和用户体验等方面。 首先,我们需要了解QQ游戏登录界面的基本元素。这个界面通常包括一个背景图片,用户名和密码输入框,登录...

    Java-登陆注册系统(模仿qq登陆界面).docx

    Java 登陆注册系统(模仿QQ登陆界面) 本文将对 Java 登陆注册系统(模仿QQ登陆界面)的知识点进行详细说明。 Java Swing 组件 在本系统中,我们使用了多种 Java Swing 组件,包括: * `JFrame`:用于创建窗口 *...

    仿QQ登陆界面

    【仿QQ登陆界面】是一个项目,旨在模仿腾讯QQ的登录页面设计和功能,适用于初学者学习和实践Android应用开发。这个项目可能包含了基础的UI设计、事件处理以及数据验证等元素,是Android开发者提升用户体验理解和界面...

    仿QQ登陆界面 java.swing

    【标题】"仿QQ登陆界面 java.swing"指的是使用Java的Swing库创建的一个模仿QQ登录界面的项目。Swing是Java提供的一种用于构建图形用户界面(GUI)的工具包,它提供了丰富的组件和功能,使得开发者能够方便地设计出...

    简单仿照qq登陆界面基于Swift3.0

    总的来说,“简单仿照qq登陆界面基于Swift3.0”是一个学习Swift UI编程的好项目,它涵盖了基本的界面设计、自定义控件、事件处理和用户交互等多个方面。通过实践这个项目,开发者可以深入理解iOS应用开发的基本流程...

    android 模仿qq登录界面EditText下拉框记住账号和密码 editText+popupwindow+sqlite方式实现

    在Android开发中,模仿QQ登录界面并实现EditText下拉框记住账号和密码的功能是一项常见的需求。这个过程涉及到多个技术点,包括UI设计、输入框交互、数据存储等。以下是实现这一功能的关键步骤和相关知识点: 1. **...

    QQ登陆界面

    QQ登陆界面的实现是Java编程领域的一个典型应用,主要用于学习用户界面设计以及网络通信的基本原理。在这个项目中,我们利用Java语言构建了一个模仿QQ登录功能的界面,这涉及到多个技术点,包括图形用户界面(GUI)...

    xamarin Android 仿QQ登陆界面

    总结,"Xamarin.Android 仿QQ登陆界面"项目涵盖了Android UI设计、数据持久化、图片处理、事件处理、权限管理、安全性等多个方面,对于学习和提升Xamarin开发技能非常有帮助。在实际开发中,还需要考虑性能优化、...

    QQ登陆界面源代码,带有进度条

    为了模仿QQ的界面风格,开发者可能使用了自定义的外观和感觉(LookAndFeel)。Java提供了多种LookAndFeel,包括跨平台的金属LookAndFeel、WindowsLookAndFeel和 NimbusLookAndFeel。在这个例子中,开发者很可能选择...

    QQ注册登陆SWING界面模拟

    总的来说,"QQ注册登陆SWING界面模拟"涵盖了Swing GUI设计、事件监听、网络通信和数据安全等多个方面的知识点。通过这个项目,开发者可以深入理解Java GUI编程,提高网络编程技能,并对用户认证过程有更直观的认识。

    java 仿QQ 登录界面

    在提供的压缩包文件中,可能包含了不同版本的QQ登录界面源码,例如"99%高仿QQ5.0登陆界面源码.rar",这是一份接近于QQ5.0风格的登录界面实现。通过阅读和分析这些源码,你可以学习到如何模仿真实应用的界面设计,并...

    小QQ 学习Swift 界面篇

    "小QQ学习Swift界面篇"是一个针对初学者的教程,旨在帮助他们掌握如何使用Swift构建类似QQ的应用界面,包括登录界面和消息界面。在这个过程中,我们将探讨几个关键的知识点: 1. **Swift基础**:Swift是Apple为iOS...

    html仿QQ快速登录界面样式代码.zip

    此外,为了实现QQ登录界面的效果,可能还会用到一些前端库,比如jQuery,它简化了DOM操作、事件处理和动画效果的实现。如果压缩包包含jQuery,你需要理解如何引入库文件,并使用其提供的方法和函数。 总的来说,这...

    仿QQ登陆及主界面 java

    QQ作为一款流行的即时通讯软件,其用户界面设计简洁、功能强大,因此,模仿QQ界面可以作为学习和掌握GUI(图形用户界面)设计的一个实践案例。 首先,我们要了解Java中的Swing库或JavaFX库,它们是Java用于创建桌面...

    html+css+javascript模拟QQ登陆窗口效果

    在本文中,我们将深入探讨如何使用HTML、CSS和JavaScript来模拟QQ登录窗口的效果。QQ作为中国最流行的即时通讯工具之一,其...现在,你可以根据这些指导,打开提供的"js模拟QQ登陆窗效果"压缩包,开始你的实践之旅吧!

    安卓Android源码——高仿QQ登陆.zip

    "安卓Android源码——高仿QQ登陆.zip"是一个针对Android平台的源码项目,旨在帮助开发者学习和模仿QQ登录界面的设计与实现。这个压缩包包含了TestLogin模块,我们可以从中抽取出一系列关于Android开发的知识点。 1....

    android 开发---QQ登陆页面的源码

    在Android开发中,模仿QQ登录页面是一个常见的学习实践,它能帮助开发者深入理解用户界面设计、网络请求处理以及第三方SDK的集成。这个压缩包文件"TestLogin"很可能包含了一个完整的Android Studio项目,用于演示...

    仿QQ聊天系统(java swing)

    【标题】"仿QQ聊天系统(java swing)"是一个基于Java Swing开发的桌面应用程序,它模仿了QQ的基本功能,提供了用户间的实时通讯服务。Swing是Java标准版(J2SE)的一部分,用于构建图形用户界面(GUI)的库,具有...

Global site tag (gtag.js) - Google Analytics