简述:
步骤:
(1)构造界面(将组件对象加入容器对象,注意:应设定对容器对象的布局策略)
(2)为界面加入事件响应处理(如单击按钮)
实现:
两种方式实现,只有用户名为"admin"且密码为"1129"时才会显示,"admin,欢迎您",否则提示输入错误。
一般方法
package harper1125.GUI;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.Color;
import javax.swing.JLabel;
import javax.swing.JPasswordField;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class login01 extends JFrame implements ActionListener{
public static void main(String[] args) {
new Click_button();
}
private JButton b_ok,b_exit;
private JLabel t_la;//用于显示信息的标签
private JTextField userName;//用户文本框
private JPasswordField password;//密码框
public login01() {
super("第一个登陆界面");//设定窗体标题
setSize(500, 100);//设定框架宽度和高度
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBackground(Color.lightGray);
setLocation(300, 240);//指定框架左上角的显示位置,(0,0)表示屏幕的左上角
setLayout(new FlowLayout());//指定框架的默认布局方式,
/**
* 若未指定布局,组件将自动布满整个容器,后面加入的组件回遮盖前面的组件
*/
userName = new JTextField(5);
password = new JPasswordField(5);
add(new JLabel("用户名:"));
add(userName);
add(new JLabel("密码:"));
add(password);
b_ok = new JButton("确定");
add(b_ok);
b_exit = new JButton("退出");
add(b_exit);
t_la = new JLabel(" ");
add(t_la);//增加一个临时标签,用来显示信息
setVisible(true);
/**
* 以下建立事件源与处理者之间的关联,两个按钮使用同一个处理者对象
*/
b_exit.addActionListener(this);//建立关联
b_ok.addActionListener(this);
}
public void actionPerformed(ActionEvent e){//处理者处理事件
if(e.getSource()== b_exit){
//用e.getSource()识别事件源
System.exit(0);
}
if(e.getActionCommand().equals("确定")){
//用另一种方式识别事件源
String ketText = String.valueOf(password.getPassword());
//获取密码框的文本
if(userName.getText().equals("admin") && ketText.equals("1129")){
t_la.setText("欢迎您,admin");
}else {
t_la.setText("用户或密码输入错误!");
setVisible(true);//显示临时标签
}
}
}
}
界面与事件处理者相分离的方法
package Test.test4;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class login02 {
public static void main(String[] args) {
login lo = new login();
Del de = new Del();
lo.setDel(de);
de.setLogin(lo);
}
}
class login extends JFrame {
JButton b_ok,b_exit;
JLabel t_la;//用于显示信息的标签
JTextField userName;//用户文本框
JPasswordField password;//密码框
public login() {
super("第一个登陆界面");//设定窗体标题
setSize(500, 100);//设定框架宽度和高度
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBackground(Color.lightGray);
setLocation(300, 240);//指定框架左上角的显示位置,(0,0)表示屏幕的左上角
setLayout(new FlowLayout());//指定框架的默认布局方式,
/**
* 若未指定布局,组件将自动布满整个容器,后面加入的组件回遮盖前面的组件
*/
userName = new JTextField(5);
password = new JPasswordField(5);
add(new JLabel("用户名:"));
add(userName);
add(new JLabel("密码:"));
add(password);
b_ok = new JButton("确定");
add(b_ok);
b_exit = new JButton("退出");
add(b_exit);
t_la = new JLabel(" ");
add(t_la);//增加一个临时标签,用来显示信息
setVisible(true);
/**
* 以下建立事件源与处理者之间的关联,两个按钮使用同一个处理者对象
*/
}
Del del;
public void setDel(Del l){
del = l;
b_exit.addActionListener((ActionListener) l);//建立关联
b_ok.addActionListener((ActionListener) l);
}
}
class Del implements ActionListener{//处理者处理事件
login l;
public void setLogin(login lo){
l = lo;
}
public void actionPerformed(ActionEvent e){
if(e.getSource()== l.b_exit){
//用e.getSource()识别事件源
System.exit(0);
}
if(e.getActionCommand().equals("确定")){
//用另一种方式识别事件源
String ketText = String.valueOf(l.password.getPassword());
//获取密码框的文本
if(l.userName.getText().equals("admin") && ketText.equals("1129")){
l.t_la.setText("欢迎您,admin");
}else {
l.t_la.setText("用户或密码输入错误!");
l.setVisible(true);//显示临时标签
}
}
}
}