Java Swing搭建QQ登录界面

目录

主界面架构

面板

登录按钮

输入框

主函数

界面图



主界面架构

  用java swing 搭建图形界面已经极不实用,swing框架搭建的GUI界面局限性很高,它需要配套的jre环境才能运行,搭建的界面也并不美观。但对于初学者来讲,学习swing有助于了解MVC架构与监听器的使用,有些学校也会以java swing设置考核。

作为一个登录界面界面它主要的组件与功能

 

组件类型功能
登录按钮JButton链接监听器实现登录功能
标签JLable包括图片标签与文字标签等
复选按钮JCheckBox细化登录操作
输入框TextFiled输入账号
密码框PasswordFiled输入密码

面板

添加各种组件的容器就是面板,一般窗口被划分为多个部分为需要使用面板,这里我建立了三个面板添加不同组件


 public LoadFrame(){
 //        LoadFrame frame=new LoadFrame();
         //新建容器
         Container container=this.getContentPane();
         //设置空布局
         container.setLayout(null);
         //添加两个新的面板
         //上半部分静态面板
         JPanel staticpanel=new JPanel();
         staticpanel.setBounds(0,0,430,65);
         //中间面板
         JPanel centerpanel=new JPanel();
         centerpanel.setBounds(0,65,430,80);
         //下半部分输入面板
         JPanel textpanel=new JPanel();
         textpanel.setBounds(0,145,430,185);
    }
    

登录按钮

新建单独的按钮类,主函数中面板添加按钮时会调用它的setBounds设置按钮在当前面板中的位置


 

import javax.swing.*;
 import java.awt.*;
 import java.net.URL;
 ​
 public class SignInButton extends JButton {
     public SignInButton(String title){
         super(title);
         this.setBounds(125,110,200,30);
         this.setBackground(new Color(22, 221, 238));
         this.setVisible(true);
     }
 }

输入框

这里的输入框与密码框都是用TextFiled类来实现的,PasswFiled类与它的不同在于PasswFiled类可以自动将输入的数据转化为'*',TextFiled类通过调用setEchoChar方法也可以自定义它所显示的字符;

在输入框中,我将输入框及它的图标标签与文字标签都封装于一个面板中


import javax.swing.*;
 import java.awt.*;
 import java.net.URL;
 ​
 public class inPutText extends JFrame {
     //账号输入
     public JPanel Userinput(){
 ​
         JPanel panel=new JPanel();
         TextField field = new TextField(10);
         JLabel label=new JLabel("账号");
         URL uRl=inPutText.class.getResource("Source/qq.png");
         ImageIcon icon=new ImageIcon(uRl);
         JLabel label1 = new JLabel(icon);
         panel.setBounds(144,20,142,25);
         label1.setBounds(0,0,12,25);
         label.setBounds(12,0,26,25);
         field.setBounds(38,0,104,25);
         panel.setLayout(null);
         panel.add(label1);
         panel.add(label);
         panel.add(field);
 ​
         return panel;
     }
     //密码输入
     public JPanel PassInput(){
         JPanel panel=new JPanel();
         TextField field = new TextField();
         field.setEchoChar('*');
         JLabel label=new JLabel("密码");
         URL uRl=inPutText.class.getResource("Source/pass.png");
         ImageIcon icon=new ImageIcon(uRl);
         JLabel label1 = new JLabel(icon);
         panel.setBounds(144,50,142,25);
         label1.setBounds(0,0,12,25);
         label.setBounds(12,0,26,25);
         field.setBounds(38,0,104,25);
         panel.setLayout(null);
         panel.add(label1);
         panel.add(label);
         panel.add(field);
         return panel;
     }

主函数

主函数中其他组件并没有被单独封装到类中,而是在LoadFrame中实现


除此之外还有建立图标所用的图片,他们被放置在相同目录的Source包中

他可以通过当前类.class.getResource()获取路径

 import javax.swing.*;
 import java.awt.*;
 import java.net.URL;
 import java.security.cert.LDAPCertStoreParameters;
 ​
 public class LoadFrame extends JFrame {
     //获取当前屏幕尺寸
     Dimension scrSize=Toolkit.getDefaultToolkit().getScreenSize();
     private int width=430;
     private int height=330;
     private int x=(scrSize.width-width)/2;
     private int y=(scrSize.height-height)/2;
     public LoadFrame(){
 //        LoadFrame frame=new LoadFrame();
         //新建容器
         Container container=this.getContentPane();
         URL url = LoadFrame.class.getResource("Source/qqicon.png");
         ImageIcon icon=new ImageIcon(url);
         JLabel jl=new JLabel("");
         jl.setIcon(icon);
 ​
         jl.setSize(icon.getIconWidth(),icon.getIconHeight());
         container.setLayout(null);
         //添加两个新的面板
         //上半部分静态面板
         JPanel staticpanel=new JPanel();
         staticpanel.setBounds(0,0,430,65);
         //中间面板
         JPanel centerpanel=new JPanel();
         centerpanel.setBounds(0,65,430,80);
         //下半部分输入面板
         JPanel textpanel=new JPanel();
         textpanel.setBounds(0,145,430,185);
 ​
 ​
 ​
         staticpanel.setBackground(new Color(31, 176, 201, 220));
         centerpanel.setBackground(new Color(87, 216, 238, 220));
         textpanel.setBackground(new Color(154, 222, 234, 220));
         //添加头像
 //        jl.setSize(icon.getIconWidth(),icon.getIconHeight());
         textpanel.setLayout(null);
         //添加登录按钮
         SignInButton button = new SignInButton("登录");
         textpanel.add(button);
         centerpanel.add(jl);
         jl.setHorizontalAlignment(SwingConstants.CENTER);
 //        MyIcon myIcon = new MyIcon();
         //添加账号输入框
         inPutText text = new inPutText();
         textpanel.add(text.Userinput());
         //添加密码输入框
         inPutText text1 = new inPutText();
         textpanel.add(text1.PassInput());
         //添加复选按钮
         JCheckBox checkBox01 = new JCheckBox("自动登录");
         JCheckBox checkBox02 = new JCheckBox("记住密码");
         checkBox01.setBounds(95,80,80,15);
         checkBox02.setBounds(175,80,80,15);
 ​
         //添加标签
         JLabel label01 = new JLabel("忘记密码");
         JLabel label02 = new JLabel("注册账号");
         label01.setBounds(275,80,80,15);
         label02.setBounds(50,120,80,15);
         textpanel.add(checkBox01);
         textpanel.add(checkBox02);
         textpanel.add(label01);
         textpanel.add(label02);
         //将面板添加到容器
         container.add(centerpanel);
         container.add(staticpanel);
         container.add(textpanel);
         this.setBounds(x,y,width,height);
         this.setVisible(true);
         this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
     }
     public void Init(){
     }
     public static void main(String[] args) {
         LoadFrame frame = new LoadFrame();
     }
 }

界面图

 

qqFrame

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值