2018年7月24日星期二
今天在昨天的基础上继续,当用户输入正确的用户名和密码时候,则登陆成功。
这里需要添加一个actionListener,当监听到按钮动作后,则进行判断。如果用户名和密码都符合要求,则login成功。
这里学习this的用法。this是什么呢?
this是指向当前对象的引用。为什么要用this呢?
在很多时候没有新建对象,但需要使用该类中的方法。但是方法必须要新建对象才能使用,这个时候java设计者,就产生了this。比如,在为创建对象前,使用this.setSize(200,300);等待对象新建的时候:Frame w=new JFrame(),才用w代替this。
java虽然是面向对象的语言,但是很多时候还是用了面向过程的方式。
在类中,有需要初始化的,可以放在构造函数中。
有些变量如果在整个类中使用,则需要定义成静态成员,并且放在方法之外使用。
代码如下:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class QQLogin{
public static void main(String args[]){
QQPanel w=new QQPanel();
w.setVisible(true);
}
}
class QQPanel extends JFrame implements ActionListener{
static JTextField txtUser=new JTextField();
static JPasswordField psd=new JPasswordField();
public QQPanel(){
System.out.println("ddd");
this.setSize(300,160);
//new component
JLabel lbUser=new JLabel("UserName:");
JLabel lbPsd=new JLabel("PassWord:");
JButton btnLogin=new JButton("Login");
JButton btnRegister=new JButton("Register");
JButton btnCancel=new JButton("Cancel");
//new pan1
JPanel pan1=new JPanel();
pan1.setLayout(new GridLayout(2,2));
//add component to the pan1
pan1.add(lbUser);
pan1.add(txtUser);
pan1.add(lbPsd);
pan1.add(psd);
//new pan2
JPanel pan2=new JPanel();
pan2.setLayout(new FlowLayout());
//add component to the pan2
pan2.add(btnLogin);
pan2.add(btnRegister);
pan2.add(btnCancel);
//register actionListener
btnLogin.addActionListener(this);
this.setLayout(new BorderLayout());
this.add(pan1,BorderLayout.CENTER);
this.add(pan2,BorderLayout.SOUTH);
}
public void actionPerformed(ActionEvent e){
if(e.getActionCommand().equals("Login")){
if(txtUser.getText().equals("aaa")&&psd.getText().equals("123")){
System.out.println("login");
this.setVisible(false);
}
}
}
}
另外,还有一个问题,什么是super?
super是指向父类对象的引用,而this是指向当前对象的引用。
为什么要有super呢?
比如,super.paint(),是调用父类的方法。
比如,在游戏中,英雄的角色,会有野兽,魔法师等,英雄是野兽的继承,如果英雄a=new野兽(),那么a.方法,会是使用英雄的方法还是野兽的呢?
如果过该方法在英雄中有,在野兽中也有,那么调用的是野兽的方法。这就展现了英雄的多态性。
注意,如果Father p=new Son();如果p.方法,该方法就是子类的方法,如果p.变量,那么调用的是父类的变量。
V�p