实验4 图形用户界面与事件处理


1.实验目的

  1. 掌握图形用户界面的基本组件
  2. 掌握图形用户界面的主要容器及布局
  3. 熟悉图形界面的事件处理模型
  4. 能够进行简单的界面设计和事件响应

2.实验内容

1.创建一窗口,当鼠标在窗口中点击时,在窗口标题栏中显示点击位置坐标。如图:

在这里插入图片描述

2.编写程序,实现如下界面(输入用户名和密码分别是000和111时,右下显示“欢迎,000”):

在这里插入图片描述

提示:
1)用户对按扭的操作将引发ActionEvent事件,该事件需要由实现了ActionListener接口的类进行处理;用户对框架的关闭按钮的操作将引发WindowEvent事件,该事件需要由实现了WindowListener接口的类进行处理。(也可以用适配器或匿名内部类来处理事件)


2)用GridLayout布局


3)密码框中返显(回送)字符,如果界面是用awt组件,就用TextField的setEchoChar方法设置;如果是用swing组件,就直接用JPasswordField(一种轻量级的文本框)及其setEchoChar方法设置,而不是用JTextField。见JDK API


4)窗口要正常按合适尺寸显示,注意setVisible、pack 、setSize等方法的使用,查阅JDK API。


5)分步骤完成,先设计界面,定义窗口及内部元素,创建界面并显示,再填加正确的事件处理。


问题:

考虑到用户输入时不小心在前面或后面输入了空格,比如从文本框获得字符串“111 ”,依然认为输入正确,程序内该如何处理?

3.实验分析、代码及运行结果

1 )

import java.awt.event.*;
import javax.swing.JFrame;
public class Work{
    
    
	public Work() {
    
    
		JFrame jf = new JFrame("jf");
		// 添加鼠标监听
		jf.addMouseListener(new MouseAdapter() {
    
    
			public void mouseClicked(MouseEvent e) {
    
    
				System.out.println(e.getX()+","+e.getY());
				jf.setTitle("("+ e.getX()+","+e.getY()+")");
			}
		});
		
		// 设置窗口默认关闭事件
		jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		jf.setSize(500,200);
		jf.setVisible(true);
		
	}
	
	public static void main(String[] args) {
    
    
		Work w1 = new Work();
	}
}

运行结果:

在这里插入图片描述

分析:

将鼠标点击事件添加到监听器中,并实现mouseClicked方法, 当点击窗口内时触发, JFrame对象的setTitle方法用来设置标题内容,
事件对象e的getX和getY方法用来获取点击的坐标。

2 )

import java.awt.Button;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
/**
 * 窗口界面
 * @author sweetheart
 *
 */

public class Work01 {
    
    

	public static void main(String[] args) {
    
    
		
		// 创建顶层容器对象
		JFrame jf = new JFrame("");
		
		// 获取jf对象的面板
		Container con = jf.getContentPane();
		
		// 设置网格分布
		con.setLayout(new GridLayout(0,2));
		
		// 创建组件对象添加到顶层容器中
		JLabel L1 = new JLabel("请输入用户名  ");
		JLabel L2 = new JLabel("请输入密码  ");
		JLabel L3 = new JLabel("");
		JTextField jtf1 = new JTextField();
		JPasswordField jtf2 = new JPasswordField();
		Button bt = new Button("确定");
		
		// 监听鼠标点击按钮bt的事件(适配器、匿名类)
		bt.addMouseListener(new MouseAdapter() {
    
    
			public void mouseClicked(MouseEvent e) {
    
    
				// 实现mouseClicked方法
				// 获取用户名输入框输入的内容并将前后的空格去除
				String user = jtf1.getText().strip();
				// 获取输入的密码
				String pass = jtf2.getText();
				// 检验密码输入是否正确
				if(user.equals("000")&&pass.equals("111")) {
    
    
					L3.setText("欢迎,000");
				}else {
    
    
					L3.setText("用户名或密码错误");
				}
			}
		});
		
		jf.add(L1);
		jf.add(jtf1);
		jf.add(L2);
		jf.add(jtf2);
		jf.add(bt);
		jf.add(L3);
		
		// 添加窗口关闭事件监听器
		jf.addWindowListener(new WindowAdapter() {
    
    
			
			public void windowClosing(WindowEvent e) {
    
    
				System.exit(0);
			}
			
		});
		
//		jf.setSize(300,150);
		jf.setBounds(100,100,400,150);
		jf.setVisible(true);
		
	}
}

运行结果:

在这里插入图片描述

分析:

基本思路:
1) 创建顶层容器对象
2) 获取jf对象的面板
3) 设置网格分布
4) 创建组件对象添加到顶层容器中
5) 监听鼠标点击按钮bt的事件(适配器、匿名类)
6) 实现mouseClicked方法
7) 添加窗口关闭事件监听器
8) 设置窗口可见

总结:

AWT组件:

在这里插入图片描述

Swing组件类层次:

在这里插入图片描述

常用容器:

1)顶层容器 – JFrame
2)通用容器 – JPanel

布局管理器:

FlowLayout------流式布局管理器
BorderLayout-----边界布局管理器
GridLayout-----网格布局管理器
CardLayout----卡片布局管理器
GridBagLayout----网格包布局管理器
BoxLayout-----箱式布局管理器

事件监听常用接口(及常用方法):

ActionListener
---- public void actionPerformed(ActionEvent e)
WindowListener
---- public void windowClosing(WindowEvent e)
MouseListener
---- public void mouseClicked(MouseEvent e)

配合适配器用法(匿名类)

// 添加窗口关闭事件监听器
jf.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});

猜你喜欢

转载自blog.csdn.net/qq_46456049/article/details/109240847