欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

GUI 事件驱动的编程模式

程序员文章站 2022-05-28 11:34:49
...

PPT


GUI 事件驱动的编程模式


摘要

事件处理的编程步骤
1.确定事件源和要处理的事件
2.创建监听类
  • 实现监听接口
  • 重写接口的方法
3.为事件源注册监听对象
  • 实例化监听对象
  • 指定一个监听对象
    GUI 事件驱动的编程模式

用组件在窗口上输入和显示信息
文本框JTextField 文本域 JTextArea
  • getText():返回文本框(域)中输入的内容(String)
  • setText(String):设置文本框(域)中显示的内容
  • append(String):在文本域中追加要显示的内容

鼠标事件

GUI 事件驱动的编程模式


事件适配器(适配器模式 简化事件监听类)
  • 事件适配器是实现的监听器接口的类
  • 为该接口中的每一个方法都实现空实现
  • 当需要创建监听器类时
  • 从事件适配器中继承,只重写需要的方法
  • 每个包含多个方法的监听器接口都会对应一个适配器(XXXXXXAdapter)

例子 (简单计算器的实现)

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.event.AncestorListener;

public class TaskCalculator6618 extends JFrame {
	private JTextField txtResult;
	private JButton btnClear;
	private JPanel p1, p2;

	public TaskCalculator6618() {
		super("6618计算器");
		initUIXXXX();
//		this.setSize(230, 230);
//		this.setLocation(200, 100);
		this.setBounds(400, 300, 400, 300);
		// 窗口关闭
		this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

		this.setVisible(true);
		// 设置窗口大小不可改变
		this.setResizable(false);
	}

	private void initUIXXXX() {
		p1 = new JPanel();
		btnClear = new JButton("清空");
		txtResult = new JTextField(13);

		p1.add(txtResult);
		p1.add(btnClear);
		this.add(p1, BorderLayout.NORTH);

		p2 = new JPanel(new GridLayout(4, 4));
		ClickButton click = new ClickButton();
		// 定义一个字符串,存储计算器中按钮上的文字,文字的排列与排列顺序一致
		// 目的:通过循环语句向窗体添加按钮
		String name = "789+456-123*0.=/";
		for (int i = 0; i < name.length(); i++) {
			JButton button = new JButton("" + name.charAt(i));
			button.addActionListener(click);
			p2.add(button);
//			p2.add(new JButton("" + name.charAt(i)));

		}
		// 添加监听对象
		this.btnClear.addActionListener(click);
		this.add(p2, BorderLayout.CENTER);

	}

	class ClickButton implements ActionListener {
		// 第一次输入
		double number1 = 0.0d;
		// 第二次
		double number2 = 0.0d;
		// 结果
		double result = 0.0d;
		// 显示信息
		String number = "";
		// 运算符
		String operator = "+";

		public void actionPerformed(ActionEvent e) {
			String Num = e.getActionCommand();
			 if (Num.equals("清空")) {
				// 文本框重置
				number = "";
				txtResult.setText("");
			}
			 //按下乘除默认number2为1.0
			 else if (Num.equals("*") || Num.equals("/")) {
			        this.number2 = 1.0D;
			      } 
			     
			else if (Num.equals("-") || Num.equals("+") || Num.equals("*") || Num.equals("/")) {
				// 获取文本框信息
				number = txtResult.getText();
				// 赋值给number1
				number1 = Double.parseDouble(number);
				// 文本框重置
				number = "";
				txtResult.setText("");
				// 运算符
				operator = Num;
			}
			// 按下等于号
			else if (Num.equals("=")) {
				// 获取文本框信息
				number = txtResult.getText();
				// 赋值给number2
				number2 = Double.parseDouble(number);
				// 计算
				if(operator.equals("+")) {
					result = number1  + number2;
				}
				if(operator.equals("-")) {
					result = number1  - number2;
				}
				if(operator.equals("*")) {
					result = number1  * number2;
				}
				if(operator.equals("/")) {
					result = number1  / number2;
				}				
			// 显示计算结果
				txtResult.setText("" + result);
			} else {
				number += Num;
				txtResult.setText(number);
			}
		}
	}

	public static void main(String[] args) {
		new TaskCalculator6618();
	}
}
相关标签: gui