java swing 创建一个简单的QQ界面教程

 更新时间:2020年09月12日 09:44:31   作者:陈思源一点也不圆  
这篇文章主要介绍了java swing 创建一个简单的QQ界面教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

记录自己用java swing做的第一个简易界面。

LoginAction.java

package com.QQUI0819;

import javax.swing.*;
import java.awt.event.*;
//首先,编写按钮癿监听器实现类
public class LoginAction implements
  ActionListener {
 private int count=0;
 //当前为null,创建后指向界面输入框
 private JTextField ulName;
 private JTextField ulpass;
 //创建时,输入界面类中癿输入框
 public LoginAction(JTextField ulName,JTextField ulpass ){
  this.ulName=ulName;
  this.ulpass=ulpass;
 }

 //实现接口中癿方法
 //当劢作发生时,这个方法执行
 public void actionPerformed(ActionEvent e) {
  //点击时,就取得界面输入框癿内容
  //此时癿jtf,指向是界面上那个输入框
  String u=ulName.getText();
  String p=ulName.getText();
  System.out.println("账号输入的是 "+u);
  System.out.println("密码输入的是 "+p)
  if(u.equals("csy123") ||(p.equals("456"))){
   //如果输入正确,弹出新界面
   JFrame jf=new JFrame();
   jf.setTitle("登陆成功");
   jf.setSize(300,400);
   jf.setLocationRelativeTo(null);
   jf.setVisible(true);
  } else {
   //如果输入正确,弹出新界面
   JFrame jf=new JFrame();
   jf.setTitle("登陆失败");
   jf.setSize(300,100);
   JButton b1 = new JButton("登陆失败,账号和密码不匹配");
   jf.add(b1);
   jf.setLocationRelativeTo(null);
   jf.setVisible(true);
  }
 }
}

QQ.java

package com.QQUI0819;

import java.awt.Color;
import java.awt.Container;
import java.awt.Cursor;
import java.awt.Font;
import java.awt.Image;
import java.util.ArrayList;

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.JRootPane;
import javax.swing.JTextField;

public class QQ extends JFrame{

 //用户名
 private JTextField ulName;
 //密码
 private JPasswordField ulPasswd;
 //小容器
 private JLabel j1;
 private JLabel j2;
 private JLabel j3;
 private JLabel j4;
 //小按钮
 private JButton b1;
 //复选框
 private JCheckBox c1;
 private JCheckBox c2;
 /**
 * 初始化QQ登录页面
 * */
 public QQ(){
 //设置登录窗口标题
 this.setTitle("QQ登录");
 //去掉窗口的装饰(边框)
 //采用指定的窗口装饰风格
 this.getRootPane().setWindowDecorationStyle(JRootPane.NONE);
 //窗体组件初始化
 init();
 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 //设置布局为绝对定位
 this.setLayout(null);
 this.setBounds(0, 0, 355, 265);
 //设置窗体的图标
 Image img0 = new ImageIcon("E:\\蓝杰培训\\第一周java基础\\basicStudy\\src\\com\\QQUI0819\\QQlogo.jpg").getImage();
 this.setIconImage(img0);
 //窗体大小不能改变
 this.setResizable(false);
 //居中显示
 this.setLocationRelativeTo(null);
 //窗体显示
 this.setVisible(true);
 }
 /**
 * 窗体组件初始化
 * */
 public void init(){
 //创建一个容器,其中的图片大小和setBounds
 Container container = this.getContentPane();
 j1 = new JLabel();
 //设置背景色
 Image img1 = new ImageIcon("E:\\蓝杰培训\\第一周java基础\\basicStudy\\src\\com\\QQUI0819\\QQ.jpg").getImage();
 j1.setIcon(new ImageIcon(img1));
 j1.setBounds(0, 0, 355, 90);
 //qq头像设定
 j2 = new JLabel();
 Image img2 = new ImageIcon("E:\\蓝杰培训\\第一周java基础\\basicStudy\\src\\com\\QQUI0819\\QQlogo.jpg").getImage();
 j2.setIcon(new ImageIcon(img2));
 j2.setBounds(20, 100, 60, 63);
 //用户名输入框
 ulName = new JTextField();
 ulName.setBounds(100, 100, 150, 20);
 //注册账号
 j3 = new JLabel("注册账号");
 j3.setBounds(260, 100, 70, 20);
 //密码输入框
 ulPasswd = new JPasswordField();
 ulPasswd.setBounds(100, 130, 150, 20);
 //找回密码
 j4= new JLabel("找回密码");
 j4.setBounds(260, 130, 70, 20);
 //记住密码
 c1 = new JCheckBox("记住密码");
 c1.setBounds(105, 155, 80, 15);
 //自动登陆
 c2 = new JCheckBox("自动登陆");
 c2.setBounds(185, 155, 80, 15);
 //登陆按钮
 b1 = new JButton("登录");
 //设置字体和颜色和手形指针
 b1.setFont(new Font("宋体", Font.PLAIN, 12));
 b1.setForeground(Color.black);
 b1.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
 b1.setBounds(20, 200, 300, 20);
 //给按钮添加
 //所有组件用容器装载
 this.add(j1);
 this.add(j2);
 this.add(j3);
 this.add(j4);
 this.add(c1);
 this.add(c2);
 this.add(b1);
 //创建监听器对象,幵加给按钮
 LoginAction lo=new LoginAction(ulName,ulPasswd);
 b1.addActionListener(lo);

 container.add(j1);
 container.add(ulName);
 container.add(ulPasswd);
 }
 public static void main(String[] args) {
 new QQ();
 }
}

效果图

素材

logo:

QQ logo:

补充知识:创建一个简单的Java Swing登入窗口

连接数据图就不弄了,要连接数据库的自行添加

为了方便排版,Layout用SpringLayout类型

1.账号框采用JTextField 类型

2.密码框采用JPasswordField类型

两者的区别是:

JPasswordField显示的文本是这样的:

文本框JTextField显示的文本是这样的:

3.建立两个JButton,一个是“登入”按钮,另一个是“重置”按钮

4.建立两个Checkbox:一个是记住密码,另一个是隐身登入

5.最后一步加入背景图

代码:

package l;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.SpringLayout;
import javax.swing.JLabel;
import java.awt.Font;
import javax.swing.JTextField;
import javax.swing.JPasswordField;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusEvent;
import javax.swing.JLayeredPane;
import java.awt.Checkbox;

public class Login extends JFrame {

  private JPanel contentPane;
  private JTextField textField;
  private JPasswordField passwordField;  
  public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
      public void run() {
        try {
          Login frame = new Login();
          frame.setVisible(true);              //窗口可见
          frame.setResizable(false);           //设置登入窗口不能调整大小
          ImageIcon img = new ImageIcon("d:/img.jpg");//这是背景图片
           JLabel imgLabel = new JLabel(img);//将背景图放在标签里。
           frame.getLayeredPane().add(imgLabel, new Integer(Integer.MIN_VALUE));     
           imgLabel.setBounds(0,0,img.getIconWidth(), img.getIconHeight());
            Container cp=frame.getContentPane();
            ((JPanel)cp).setOpaque(false);
        } catch (Exception e) {
          e.printStackTrace();
        }
      }
    });
  }
  
  public Login() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 450, 300);
    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    setContentPane(contentPane);
    SpringLayout sl_contentPane = new SpringLayout();
    contentPane.setLayout(sl_contentPane);
    
    JLabel lblNewLabel = new JLabel("账号:");
    lblNewLabel.setFont(new Font("黑体", Font.PLAIN, 19));
    sl_contentPane.putConstraint(SpringLayout.NORTH, lblNewLabel, 34, SpringLayout.NORTH, contentPane);
    sl_contentPane.putConstraint(SpringLayout.WEST, lblNewLabel, 41, SpringLayout.WEST, contentPane);
    contentPane.add(lblNewLabel);
    
    JLabel lblNewLabel_1 = new JLabel("密码:");
    lblNewLabel_1.setFont(new Font("黑体", Font.PLAIN, 19));
    sl_contentPane.putConstraint(SpringLayout.NORTH, lblNewLabel_1, 29, SpringLayout.SOUTH, lblNewLabel);
    sl_contentPane.putConstraint(SpringLayout.WEST, lblNewLabel_1, 0, SpringLayout.WEST, lblNewLabel);
    contentPane.add(lblNewLabel_1);
    
    textField = new JTextField();
    textField.addFocusListener(new FocusAdapter() {
      @Override
      public void focusLost(FocusEvent e) {
        String temp=textField.getText();
        if(temp.equals("")) {
          textField.setForeground(Color.GRAY);               //JTextField提示输入QQ号
          textField.setText("请输入QQ号");
        }
      }
      
      public void focusGained(FocusEvent e) {
        String temp=textField.getText();
        if(temp.equals("请输入QQ号")) {
          textField.setText("");
        }
      }
    });
    sl_contentPane.putConstraint(SpringLayout.NORTH, textField, 1, SpringLayout.NORTH, lblNewLabel);
    sl_contentPane.putConstraint(SpringLayout.WEST, textField, 52, SpringLayout.EAST, lblNewLabel);
    sl_contentPane.putConstraint(SpringLayout.EAST, textField, 196, SpringLayout.EAST, lblNewLabel);
    contentPane.add(textField);
    textField.setColumns(10);
    
    passwordField = new JPasswordField();
    sl_contentPane.putConstraint(SpringLayout.NORTH, passwordField, 26, SpringLayout.SOUTH, textField);
    sl_contentPane.putConstraint(SpringLayout.WEST, passwordField, 52, SpringLayout.EAST, lblNewLabel_1);
    sl_contentPane.putConstraint(SpringLayout.SOUTH, passwordField, 48, SpringLayout.SOUTH, textField);
    sl_contentPane.putConstraint(SpringLayout.EAST, passwordField, 201, SpringLayout.EAST, lblNewLabel_1);
    contentPane.add(passwordField);
    
    JButton btnNewButton = new JButton("登入");
    sl_contentPane.putConstraint(SpringLayout.SOUTH, btnNewButton, 65, SpringLayout.SOUTH, passwordField);
    contentPane.add(btnNewButton);
    
    JButton button = new JButton("重置");
    sl_contentPane.putConstraint(SpringLayout.NORTH, btnNewButton, 2, SpringLayout.NORTH, button);
    sl_contentPane.putConstraint(SpringLayout.EAST, btnNewButton, -70, SpringLayout.WEST, button);
    sl_contentPane.putConstraint(SpringLayout.NORTH, button, 32, SpringLayout.SOUTH, passwordField);
    sl_contentPane.putConstraint(SpringLayout.WEST, button, 242, SpringLayout.WEST, contentPane);
    button.setFont(new Font("宋体", Font.PLAIN, 19));
    contentPane.add(button);
    
    Checkbox checkbox = new Checkbox("记住密码");
    sl_contentPane.putConstraint(SpringLayout.WEST, checkbox, 0, SpringLayout.WEST, textField);
    sl_contentPane.putConstraint(SpringLayout.SOUTH, checkbox, -6, SpringLayout.NORTH, btnNewButton);
    contentPane.add(checkbox);
    
    Checkbox checkbox_1 = new Checkbox("隐身登入");
    sl_contentPane.putConstraint(SpringLayout.WEST, checkbox_1, 35, SpringLayout.EAST, checkbox);
    sl_contentPane.putConstraint(SpringLayout.SOUTH, checkbox_1, 0, SpringLayout.SOUTH, checkbox);
    contentPane.add(checkbox_1);
  }
}

运行截图:

以上这篇java swing 创建一个简单的QQ界面教程就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Spring与Hibernate整合事务管理的理解

    Spring与Hibernate整合事务管理的理解

    这篇文章主要介绍了Spring与Hibernate整合事务管理的理解的相关资料,需要的朋友可以参考下
    2016-09-09
  • SpringMVC ajax请求的处理方法介绍

    SpringMVC ajax请求的处理方法介绍

    Ajax即异步的 JavaScript和XML,是一种无需重新加载整个网页的情况下,能够更新部分模块的网页技术,下面这篇文章主要给大家介绍了关于SpringMVC Ajax请求的处理,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-11-11
  • Java数组归纳总结

    Java数组归纳总结

    这篇文章主要介绍了Java数组归纳总结,总结内容有一维数组、二维数组、遍历数组、替换元素、数组排序、数组拷贝、元素查询、排序算法,下面来看看这些方法的相关资料,需要的小伙伴可以辛苦一下
    2022-01-01
  • AQS(AbstractQueuedSynchronizer)抽象队列同步器及工作原理解析

    AQS(AbstractQueuedSynchronizer)抽象队列同步器及工作原理解析

    AQS是用来构建锁或者其他同步器组件的重量级基础框架及整个JUC体系的基石,通过内置的FIFO对列来完成资源获取线程的排队工作,并通过一个int类型变量表示持有锁的状态,本文给大家详细介绍下AQS抽象队列同步器的相关知识,感兴趣的朋友一起看看吧
    2022-03-03
  • SpringMVC中的HandlerMapping和HandlerAdapter详解

    SpringMVC中的HandlerMapping和HandlerAdapter详解

    这篇文章主要介绍了SpringMVC中的HandlerMapping和HandlerAdapter详解,在Spring MVC中,HandlerMapping(处理器映射器)用于确定请求处理器对象,请求处理器可以是任何对象,只要它们使用了@Controller注解或注解@RequestMapping,需要的朋友可以参考下
    2023-08-08
  • Java制作证书的工具keytool用法详解

    Java制作证书的工具keytool用法详解

    本文主要介绍了Java制作证书的工具keytool用法详解,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • 深入探究Java线程的创建与构造方法

    深入探究Java线程的创建与构造方法

    这篇文章主要给大家分享的是java线程的创建以及构造方法,想了解具体方式的小伙伴可以参考下面文章内容,希望对你有所帮助
    2022-04-04
  • 详解JAVA中的Collection接口和其主要实现的类

    详解JAVA中的Collection接口和其主要实现的类

    这篇文章主要介绍了JAVA中的Collection接口和其主要实现的类,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • Java中for、foreach、stream区别和性能比较详解

    Java中for、foreach、stream区别和性能比较详解

    for、foreach、stream都可以循环处理数据,如果单纯当循环使用,for、foreach、stream哪个性能更好,这篇文章主要给大家介绍了关于Java中for、foreach、stream区别和性能的相关资料,需要的朋友可以参考下
    2024-03-03
  • SpringBoot3 Web编程开发的工程搭建拦截器及测试工具示例

    SpringBoot3 Web编程开发的工程搭建拦截器及测试工具示例

    这篇文章主要介绍了SpringBoot3 Web编程开发的工程搭建拦截器及测试工具示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08

最新评论