2021-07-01

GUI之监听

按钮监听事件

代码的书写顺序

  • 先写所需要的所有的组件
  • 再写组件需要添加的监听器
  • 设置布局
  • 把组件添加到frame里面
  • 排版(pack()),设置可见性,窗口关闭的监听(可另写一个方法再调用)
package com.li.listen;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;


//多个按钮共用一个监听事件,通过button.setActionCommand("")设置按钮的动作名(方便后面实现接口的时候来判断是哪一个按钮的事件)
//实现AcitonListener监听事件,通过e.getActionCommand()---获取按钮的信息
// 如果e.getActionCommand().equals("start...(之前设置的按钮的动作名)")这样就可以判断是哪一个按钮点击了,然后再具体书写实现的方法
public class Test1Listener {
    public static void main(String[] args) {
        Frame frame = new Frame();
        Button button = new Button();
//new ActionListener()这是一个接口(通过按住ctrl+鼠标点击可查看),可以书写一个类去实现这个接口
        button.addActionListener(new MyActionListener());
        frame.add(button,BorderLayout.CENTER);
        frame.setVisible(true);
        frame.pack();
        Close(frame);

    }
    //书写关闭窗口的方法,封装方法
    public static void Close(Frame frame){
        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }
}
class MyActionListener implements ActionListener{
    @Override
    public void actionPerformed(ActionEvent e) {
        System.out.println("点击这个button以后就会出现的事件");
    }
}

输入框监听事件

package com.li.listen;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class TestTextField {
    public static void main(String[] args) {
        //主函数里面只写启动
        new MyFrame();
    }
}
class MyFrame extends Frame {
    public MyFrame() throws HeadlessException {
        TextField textField = new TextField();
        add(textField);
        //增加输入框的文本监听事件
        textField.addActionListener(new MyactionListener1());
        //窗口关闭监听
        addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
        textField.setEchoChar('^');//用^来掩饰输入的字符,用户端不可见,后台可见
        setVisible(true);
        pack();
    }
}

class MyactionListener1 implements ActionListener{
    @Override
    public void actionPerformed(ActionEvent e) {
//        e.getSource();是返回一个object对象,所以需要用textfield来接收
        TextField field=(TextField)e.getSource();
        System.out.println(field.getText());
        field.setText("");//当输入回车的时候,启动监听事件,首先打印输入的值,然后设置文本域为“”。

    }
}

监听事件的应用(按钮和输入框的监听)

简易计算器的制作

package com.li.listen;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

//制作简易的计算器
public class TestCalc {
    public static void main(String[] args) {

        new Calculate();
    }
}
//窗口类
class Calculate extends Frame {
    public Calculate() throws HeadlessException {
//有三个输入框,一个标签label一个按钮=
        TextField field1 = new TextField(10);
        TextField field2 = new TextField(10);
        TextField field3 = new TextField(20);//后面的参数是输入框的大小长度

        Label label = new Label("+");
        Button button = new Button("=");
        button.addActionListener(new MyCalculateListener(field1 ,field2,field3));
//        设置流式布局
        setLayout(new FlowLayout());
        //将输入框,标签和按钮添加到frame窗口里面
        add(field1);
        add(label);
        add(field2);
        add(button);
        add(field3);
        pack();
        setVisible(true);
        //关闭事件
        addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }
}

//监听类
class MyCalculateListener implements ActionListener{
    //要明白:下面重写的方法是需要使用前述的输入框啥的,所以进行构造器
    private TextField field1,field2,field3;
    public MyCalculateListener(TextField field1,TextField field2,TextField field3){
        this.field1=field1;
        this.field2=field2;
        this.field3=field3;
    }
    @Override
    public void actionPerformed(ActionEvent e) {
        //获取加数和被加数
        int n1=Integer.parseInt( field1.getText());
        int n2=Integer.parseInt( field2.getText());
        //通过加法运算送到第三个框中
        field3.setText(""+(n1+n2));
        //清空第一个和第二个框
        field1.setText("");
        field2.setText("");
    }
}

在这里插入图片描述

简易计算器制作的代码优化–使用面向对象

以属性+方法的形式,使用内部类实现监听。内部类可以随意调用外部类的属性。

package com.li.listen;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

//制作简易的计算器
public class TestCalc {
    public static void main(String[] args) {

        new Calculate().loadFrame();
    }
}
//窗口类
//采用面向对象的方法来书写窗口类,然后使用内部类来定义监听类,目的就是简化代码。提高效率
//面向对象=====属性+方法
class Calculate extends Frame {
    //属性
    TextField field1;
    TextField field2;
    TextField field3;
    //方法
    public void loadFrame() {
//有三个输入框,一个标签label一个按钮=
        field1 = new TextField(10);
        field2 = new TextField(10);
        field3 = new TextField(20);//后面的参数是输入框的大小长度

        Label label = new Label("+");
        Button button = new Button("=");
        button.addActionListener(new MyCalculateListener());
//        设置流式布局
        setLayout(new FlowLayout());
        //将输入框,标签和按钮添加到frame窗口里面
        add(field1);
        add(label);
        add(field2);
        add(button);
        add(field3);
        pack();
        setVisible(true);
        //关闭事件
        addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }

    //内部类来实现监听器
    // 监听类
    class MyCalculateListener implements ActionListener{
        //由于是内部类,所以可以直接使用外部类的属性
        @Override
        public void actionPerformed(ActionEvent e) {
            //获取加数和被加数
            int n1=Integer.parseInt( field1.getText());
            int n2=Integer.parseInt( field2.getText());
            //通过加法运算送到第三个框中
            field3.setText(""+(n1+n2));
            //清空第一个和第二个框
            field1.setText("");
            field2.setText("");
        }
    }

}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数字乡村和智慧农业的数字化转型是当前农业发展的新趋势,旨在通过应用数字技术,实现农业全流程的再造和全生命周期的管理服务。中国政府高度重视这一领域的发展,提出“数字中国”和“乡村振兴”战略,以提升国家治理能力,推动城乡融合发展。 数字乡村的建设面临乡村治理、基础设施、产业链条和公共服务等方面的问题,需要分阶段实施《数字乡村发展战略纲要》来解决。农业数字化转型的需求包括满足市民对优质农产品的需求、解决产销对接问题、形成优质优价机制、提高农业劳动力素质、打破信息孤岛、提高农业政策服务的精准度和有效性,以及解决农业融资难的问题。 数字乡村建设的关键在于构建“1+3+4+1”工程,即以新技术、新要素、新商业、新农民、新文化、新农村为核心,推进数据融合,强化农业大数据的汇集功能。数字农业大数据解决方案以农业数字底图和数据资源为基础,通过可视化监管,实现区域农业的全面数字化管理。 数字农业大数据架构基于大数据、区块链、GIS和物联网技术,构建农业大数据中心、农业物联网平台和农村综合服务指挥决策平台三大基础平台。农业大数据中心汇聚各类涉农信息资源和业务数据,支持大数据应用。信息采集系统覆盖市、县、乡、村多级,形成高效的农业大数据信息采集体系。 农业物联网平台包括环境监测系统、视频监控系统、预警预报系统和智能控制系统,通过收集和监测数据,实现对农业环境和生产过程的智能化管理。综合服务指挥决策平台利用数据分析和GIS技术,为农业决策提供支持。 数字乡村建设包括三大服务平台:治理服务平台、民生服务平台和产业服务平台。治理服务平台通过大数据和AI技术,实现乡村治理的数字化;民生服务平台利用互联网技术,提供各类民生服务;产业服务平台融合政企关系,支持农业产业发展。 数字乡村的应用场景广泛,包括农业生产过程、农产品流通、农业管理和农村社会服务。农业生产管理系统利用AIoT技术,实现农业生产的标准化和智能化。农产品智慧流通管理系统和溯源管理系统提高流通效率和产品追溯能力。智慧农业管理通过互联网+农业,提升农业管理的科学性和效率。农村社会服务则通过数字化手段,提高农村地区的公共服务水平。 总体而言,数字乡村和智慧农业的建设,不仅能够提升农业生产效率和管理水平,还能够促进农村地区的社会经济发展,实现城乡融合发展,是推动中国农业现代化的重要途径。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值