学习完类与对象和类与继承之后,对面向对象编程(OOP)有了基本的了解。OOP的核心思路就是先定义类,设置好类的属性和方法,然后创建对象,调用方法,最终实现程序的运行。编程其实是一项“前人栽树,后人乘凉”的工作,前人把一些实现特定功能的程序写在一个类里面,我们只需要创建对象,然后调用就行。了解完这些之后我们可以做一个QQ登录的UI设计。
UI设计常见的一些类通常放在java.awt和javax.swing包里面,在定义类之前,首先要使用“import”将其调用过来。
import javax.swing.*;
import java.awt.*;
简单的UI设计的思路大致是:1.创建窗体,设置好窗体的尺寸、标题、布局等;2、加载组件对象,包括图片标签,文字标签,输入框,按钮等;3、将组件加入到窗体中。实现代码如下:
import javax.swing.*;
import java.awt.*;
public class MyUI {
public void initiUI() {
/**
* 1创建一个窗体
*/
JFrame jf= new JFrame();
//定义尺寸、标题、关闭选项、窗体大小固定以及窗体的显示
jf.setSize(500,380);
jf.setTitle("QQ登录");
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setResizable(false);
jf.setVisible(true);
/*
*定义窗体的布局,这里使用的是流式布局
*流式布局的主要特点是:整体居中,从左往右排列,一行排列不下自动换行
*/
FlowLayout f1=new FlowLayout();
jf.setLayout(f1);
/*
* 2.加载组件对象
*/
//图片--标签
ImageIcon image = new ImageIcon("Q.jpeg");
JLabel imgela= new JLabel(image);
//文字标签
JLabel namejla= new JLabel("账号:");
JLabel passjla= new JLabel("密码:");
//输入框。这里的JPasswordField是JTextField的子类,可以实现输入密码时隐藏密码的功能。
JTextField nameInput =new JTextField();
JPasswordField pwdInput =new JPasswordField();
//输入框尺寸
Dimension dim =new Dimension(400,40);
nameInput.setPreferredSize(dim);
pwdInput.setPreferredSize(dim);
//加登录按钮
JButton btn =new JButton("登录");
//3.将组件加到窗体上。组件添加存在先后顺序,按窗体的布局设置好先后顺序
jf.add(imgela);
jf.add(namejla);
jf.add(nameInput);
jf.add(passjla);
jf.add(pwdInput);
jf.add(btn);
jf.setVisible(true);
}
//创建对象,调用方法
public static void main(String[] args) {
MyUI myui= new MyUI();
myui.initiUI();
}
}
运行上面的程序就可以得到一个如下图所示的窗体。
按照日常使用app的经验时,我们希望输入账号和密码之后点击登录就可以进入到QQ界面。这里我们需要使用到监听器,监听器的作用类似于一个开关电路,当我们按下开关键时,电路接通灯就亮了。在这里我们希望,输入完正确的账号和密码,点击登录键后,界面自动转换为我们想要的界面,如若输入错误,则显示其他的界面。
java中关于监听器的类为ActionListener,由于每个人对监听器都所定义的功能不同,所以在java中这个类并不是完整的,它只有方法名,没有方法体,具体的方法体需要使用者根据自己的需求去编写。关于监听器类的具体实现代码如下:
import javax.swing.*;
import java.awt.event.*;
public class ButtonListener implements ActionListener{
JFrame ui;
private JTextField nameInput;
private JPasswordField pwdInput;
//这里面方法的作用就是将输入框里面的账号与密码传送到监听器中,实现参数传递的功能
public void setTextField(JTextField nameInput){
this.nameInput = nameInput;}
public void setPassword(JPasswordField pwdInput){
this.pwdInput = pwdInput;
}
public void actionPerformed(ActionEvent e) {
JFrame JF = new JFrame();
JF.setSize(400,300);
JF.setLocationRelativeTo(null);
JF.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
String str;
//获取用户名,getText()是JAVA中的方法,获取文本框内容
String name = nameInput.getText();
//获取密码的输入框的内容
char[] temp = pwdInput.getPassword();
//根据char[]生成字符串
String pwd = new String(temp);
if(name.equals("admin")&&(pwd.equals("123456"))){
str = "登录成功!";
}else {
str = "您输入的信息有误,请重新输入!";
}
JLabel J = new JLabel(str);
JF.add(J);
JF.setVisible(true);
//可以实现在输入账号密码之后自动关闭原来的登录界面
ui.setVisible(false);
}
}
在上面的UI设计程序里面我们创建监听器的对象,调用方法。代码如下:
ButtonListener Listen = new ButtonListener();
btn.addActionListener(Listen);
//参数传递,将账号密码传输到监听器中
Listen.setTextField(nameInput);
Listen.setPassword(pwdInput);
Listen.ui=jf;
这里需要注意的是ActionListener是一个接口类,定义监听器类时使用"implements",实现接口类后,必须重写接口类里面的方法,以实现自己的功能。事件监听机制的主要思路就是将窗体中输入框里的账号和密码传递到监听器类中,在监听器类的方法中提取到账号与密码的信息,然后再根据账号与密码的正确与否,做出相应的回应。在这里我们设置为输入账号与密码之后,点击登录按钮,就会自动弹出一个新的界面,如显示“登录成功”或“您输入的信息有误,请重新输入!”如下图所示: