当前位置: 首页 > 编程日记 > 正文

Java 基础【04】Swing 组件事件注册

    聪明出于勤奋,天才在于积累。——华罗庚

对上次的三个问题的个人理解:

1) 程序首先是从main函数开始执行的,假设main 函数不是 static ,就要先实例化这个类,然后调用 main 方法,这似乎是不现实的. 其次 用 static 修饰的 main 方法是存储在静态的存贮区当中的,也就是说在创建一个类之后,main 函数就已经存在了,去掉 static 修饰之后,编译可以通过,但是不能执行。
   2)查 API之后才发现BufferedRead 对象的 readLine()方读到的数据是,读到有换行的地方为一行,直接用 readLine 判断的时候已经读入一行了,在输出数据时就会隔行输出。

 FileReader file=new FileReader("C:\\123.txt");BufferedReader br1=new BufferedReader(file);//判断的时候已经读入一行while((br1.readLine())!=null){   //输出的是第二行的内容
                System.out.println(br1.readLine());}

所以用一个临时的字符串变量来存储读到的数据,程序改改这样就可以了:

    FileReader file=new FileReader("C:\\123.txt");BufferedReader br1=new BufferedReader(file);String cd;while((cd=br1.readLine())!=null){System.out.println(cd);}

3)如果将客户端、输入流、输出流的初始化全部放进 Send 按钮的事件当中时,程序会达到我想要的效果,点击连接之后就会有客户端连接上去,但总觉得这样会有其他的安全隐患,总有一天它会暴漏的。

今天要记录在这里的是老师随堂布置的一个小程序,实现一个计算器的雏形,里面只有加减运算,对其中的按钮注册有了一点新的认识,还是将代码贴出来先。

  import javax.swing.*;import java.awt.*;import java.awt.event.*; public class ComboBoxTest extends JFrame{     private JButton done =new JButton(" Done ");private JButton clear=new JButton(" Clear ");      private JLabel  label = new JLabel("Please choose serverID:0(+)and1(-)");      public  ComboBoxTest(){     //添加一个组合框并设置两个选项final JComboBox c = new JComboBox();int [] array = {0,1};c.addItem(array[0]);c.addItem(array[1]);final JTextField operand1=new JTextField(10);      //添加第一个操作数为输入文本框,占8列final JLabel t=new JLabel("+");                     //初始化中间的操作符为“+”号final JTextField operand2=new JTextField(10);      //第二个操作符final JTextField result=new JTextField(4);         //结果的文本域 ,初始化占4列//给组合框c注册一个事件,当组合框选项发生变化的时候,触发的相应事件c.addActionListener(new ActionListener() {      public void actionPerformed(ActionEvent e) {if(c.getSelectedIndex()==0)   //选项为“0”的时候 令中间的操作符显示“+”号t.setText(" + ");           else  t.setText(" - ");        }});//给按钮Done注册一个事件,当中间的操作符不同时进行不同的操作done.addActionListener(new ActionListener(){   public void actionPerformed(ActionEvent e) {if(c.getSelectedIndex()==0)   {//当中间的操作符为“+”号时,进行两个操作数的加法 ,文本域的get()方法返回的是字符串,进行强制转换int a=Integer.parseInt(operand1.getText())+Integer.parseInt(operand2.getText());                     result.setText("="+" "+a+" ");  //设置结果显示相应的结果
                   }          else {//当中间的操作符为“-”号的时候,进行两个操作数的减法int a=Integer.parseInt(operand1.getText())-Integer.parseInt(operand2.getText());                     result.setText("="+" "+a+" ");}    }              });// 给按钮clear注册一个事件,清空两个操作数和结果的内容clear.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e) {            operand1.setText("");    //清空操作数1operand2.setText("");    //清空操作数2result.setText("");      //清空结果框
            }               });    setLayout(new FlowLayout());add(label);                   add(c);add(operand1);add(t);add(operand2);add(result);add(done);add(clear); setSize(350,140);  setVisible(true);   }public static void main(String[] args) {new ComboBoxTest(); }
}

上面的代码中给选项框、“done”、"clear"按钮注册事件的时候所用的都是匿名类,这个类的创建就是为了给相应的组件添加事件,还可以这样写,用里面的“clear”这个按钮来做个例子。

实现 ActionListener 抽象类当中的唯一的一个接口函数,为此定义一个 ButtonListener 监听器的对象

class ButtonListener implements ActionListener{public void actionPerformed(ActionEvent e){operand1.setText("");    //清空操作数1operand2.setText("");    //清空操作数2result.setText("");      //清空结果框             
       }}

类属性当中需要定义一个 ButtonListener 的对象属性:

private ButtonListener clearaction = new ButtonListener();

最后一个步骤就是将这个按钮监听器的事件对象注册给按钮:

clear.addActionListener(clearaction);

  个人总结:

这一种注册事件的方式大致过程是这样的 ButtonListener =》 ActionListener => 注册给按钮,和匿名类相比,缺点是代码量有点多,但假设你有N个打算具备这种

功能的按钮并且事件实现的方法比较复杂时,就可以实现一个 ActionListener 的对象,同时定义N个 ButtonListener 监听器对象,将相同的事件实现注册给按钮就可以了,相比之下匿名类在这种情形下面会有很大的工作量,代码量会激增。

还可以通过事件 e.getSource()方法将所有的事件处理放进一个函数当中,这样似乎维护起来要更方便一点,在类的声明当中要强调实现接口中的抽象函数。

public class ComboBoxTest extends JFrame implements ActionListener

具体的实现过程如下:

  public void actionPerformed(ActionEvent e){if(e.getSource()==c){if(c.getSelectedIndex()==0)   //选项为“0”的时候 令中间的操作符显示“+”号t.setText(" + ");           else  t.setText(" - ");     }if(e.getSource()==done){if(c.getSelectedIndex()==0)   {//当中间的操作符为“+”号时,进行两个操作数的加法 ,文本域的get()方法返回的是字符串,进行强制转换int a=Integer.parseInt(operand1.getText())+Integer.parseInt(operand2.getText());                     result.setText("="+" "+a+" ");  //设置结果显示相应的结果
               }          else {//当中间的操作符为“-”号的时候,进行两个操作数的减法int a=Integer.parseInt(operand1.getText())-Integer.parseInt(operand2.getText());                     result.setText("="+" "+a+" ");}      }       if(e.getSource()==clear){operand1.setText("");    //清空操作数1operand2.setText("");    //清空操作数2result.setText("");      //清空结果框    }

相关文章:

VC++ 隐藏控制台程序窗口

转自:http://hi.baidu.com/sicceer/blog/item/d9c35a810d15c4c8bc3e1ec8.html 设置 #pragma comment( linker, "/subsystem:/ "windows/ " /entry:/ "mainCRTStartup/ " " ) // 设置入口地址 这样就ok了 在控制台程序中隐藏控制台窗口…

深度学习原来还可以这么学!

最近身边很多朋友在讨论人工智能,讨论人工智能在我们生活中的应用,随之而来就开始讨论深度学习技术,但是由于深度学习的涉及面比较广,对数学的要求比较高,所以想学也不太敢学,生怕认真学了却没学会。其实可…

016-热更新之FishingJoy一

我们在完成对xlua的学习后,现在我们在接下来的几天中,将会用一个案例来学习一下xlua的使用。请大家不用担心,这个课件的使用是基于xlua而开发的。因为我们在这个部分是为了使用xlua,所以我们只在已经做到的案例上进行xlua的学习。…

从0到1 | 手把手教你如何使用哈工大NLP工具——PyLTP!

作者 | 杨秀璋来源 | CSDN 博客(CSDN id:Eastmount)(本文经作者授权,此系列文章整理后微信平台首发于AI科技大本营)【导语】此文是作者基于 Python 构建知识图谱的系列实践教程,具有一定创新性和…

PL/SQL Developer远程访问Oracle数据库

安装oracle对应的版本 ,在oracle的安装目录找到oracle\product\11.2.0\dbhome_1\NETWORK\ADMIN\tnsnames.ora这个文件添加上数据库访问的串 LWZC (DESCRIPTION (ADDRESS (PROTOCOL TCP)(HOST [服务器地址])(PORT 1521))(CONNECT_DATA (SERVER DEDICATED)(SE…

基于shiro的权限设计

shiro介绍 Apache shiro是一个权限控制框架,它将安全认证抽取出来,实现用户身份认证,权限授权,加密,会话管理等功能,是一个通用的安全认证框架,而且还可以用于分布式集群。功能如下 1.验证用户 …

C++ 中隐藏DOS调用的命令行窗口

转自:http://hi.baidu.com/jackyho2000/blog/item/b5c5fabdd3b4db0019d81fbb.html 我演示了一下在MFC程序中怎么应用DOS的dir的命令,可是我们遇到了需要解决的问题,首先就是文件dir.txt的残留问题,其实这个问题很简单,…

Citrix Avalon安装实验手册之一----Avalon概述及实验环境准备

“Avalon”(阿瓦隆)是思杰下一代桌面/应用交付产品的项目名称,其核心目标是把现有Windows应用和桌面转换成云服务。 其中你最熟悉的XenApp和XenDesktop就是Avalon项目的核心所在。Avalon这个全新解决方案将XenApp、XenDesktop、CloudGateway、…

图片像素、英寸、厘米之间的单位换算

转自:http://hi.baidu.com/cjg501/blog/item/f040fc0898d5379f0b7b8244.html 今天朋友用photoshop处理图片时要把图片保存指定的大小,但她只对厘米要形像感,可是在软件里保存的图片没有这个单位,只能保存的单位为像素;…

创客集结号_你知道单机片和Arduino之间的区别吗

Arduino 是一款便捷灵活、方便上手的开源电子原型平台,包含硬件和软件都是开源的。 开源硬件指与自由及开放原始码软件相同方式设计的计算机和电子硬件。开源硬件开始考虑对软件以外的领域开源,是开源文化的一部分。这个词主要是用来反映自由释放详细信息…

痛!“做C#半年,挣的不如做AI 1个月?”看到第二句泪目……

前两天在网上发现一个热门话题:“做开发一年,在北京月薪不到1万,有点迷茫。” 其中,这个回答我永远忘不了:来源:库库的派派知乎回答,已取得授权在这短短的一条信息里,小编佩服不仅…

刷新记录,算法开源!字节跳动获人体姿态估计竞赛双冠 | CVPR 2019

整理 | Jane出品 | AI科技大本营(id:rgznai100)【导读】6 月 16--20 日,计算机视觉与模式识别领域顶会 CVPR 2019 在美国长滩举行。每年的 CVPR 盛会除了精彩的论文分享、Workshop 与 Tutorial,还会举办多场涵盖计算机…

java 赋值,算术,一元操作符(翻译自Java Tutorials)

原文出自 http://www.cnblogs.com/ggjucheng/archive/2012/12/15/2819621.html 英文出自 http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op1.html 简单赋值操作符 见到的最常用的操作符之一就是简单赋值操作符"".它把值从操作符的右边赋予到左边&#x…

初识Kubernetes(K8s):理论基础

Kubernetes是什么?Kubernetes,简称K8s,是用8代替8个字符“ubernete”而成的缩写。Kubernetes是Google开源的一个容器编排引擎,同时也是一个开源的容器集群管理系统,可以实现容器应用的自动化部署、自动扩缩容、监控和维…

Sobel算子及cvSobel

转自:http://blog.sina.com.cn/s/blog_4bdbec750100mufo.html 由于项目里要用到边缘检测,所以今天研究了一下最简单的梯度的方法。 首先,我们来开一下计算机是如何检测边缘的。以灰度图像为例,它的理论基础是这样的,如…

python全栈开发笔记---------函数

一 数学定义的函数与python中的函数 初中数学函数定义:一般的,在一个变化过程中,如果有两个变量x和y,并且对于x的每一个确定的值,y都有唯一确定的值与其对应,那么我们就把x称为自变量,把y称为因…

OpenCV中的内存泄露问题(cvLoadImage,cvCloneImage)

转自:http://apps.hi.baidu.com/share/detail/30893646 在做项目的过程中,使用OpenCV经常会出现一些内存泄露问题,自己编写的程序出现问题还情有可原,但若是库函数调用和使用时出现,却很令我恼火。花了好长时间和实践的…

41款实用工具,数据获取、清洗、建模、可视化都有了

诸如结构式访谈、非结构式访谈、开放式问卷调查、封闭式问卷调查、记录评论和观察等技术统称为事实调查方法。这种事实调查方法和其他数据获取方法可以采取自动化,而不必使用人工方法。使用具有专用软件的物理设备(如终端、传感器和扫描仪等)…

OpenCV中的内存泄漏检测

转自:http://chaishushan.blog.163.com/blog/static/130192897200911685559809/ 内存泄漏时程序开发中经常遇到的问题. 而且出现内存泄漏很难检测,但是其导致的结果却是灾难性的. 这里讲一下opencv中内存泄漏检测的一些技巧.OpenCV中关于内存管理主要涉及到以下3个函…

一文全面了解基于内容的推荐算法

作者丨gongyouliu来源 | 转载自大数据与人工智能(ID:ai-big-data)这篇文章我们主要关注的是基于内容的推荐算法,它也是非常通用的一类推荐算法,在工业界有大量的应用案例。本文会从什么是基于内容的推荐算法、算法基本原理、应用场…

[Nginx优化]分享nginx配置文件及优化说明

1、系统及内核方面 根据服务器用途,建议系统最小化安装或针对web服务器进行系统内核重新编译;在内核参数的一些优化,如下: # Add net.ipv4.tcp_max_syn_backlog 65536 #表示SYN队列的长度 net.core.netdev_max_backlog 3…

laravel项目composer安装

1.下载 Composer (https://pkg.phpcomposer.com/#how-to-install-composer) 安装前请务必确保已经正确安装了 PHP。打开命令行窗口并执行 php -v 查看是否正确输出版本号。 打开命令行并依次执行下列命令安装最新版本的 Composer: 复制php -r…

淘宝装修:第一日 —— 图片轮播

先添加一个自定义内容区&#xff0c;进入源码编辑&#xff0c;如下图所示&#xff1a; 添加源码如下&#xff1a; <TABLE border0 cellSpacing0 cellPadding0 width773 height220> <TBODY> <TR> <TD width773> <P> <MARQUEE height220 behavi…

强化学习大规模应用还远吗?Youtube推荐已强势上线

来源 | 转载自深度传送门导读&#xff1a;本文将介绍在深度学习的强力驱动下&#xff0c;给推荐系统工业界所带来的最前沿的变化。本文主要根据几大顶会2019的最新论文&#xff0c;总结一下深度强化学习给推荐系统以及CTR预估工业界带来的最新进展。 凡是Google出品&#xff0c…

layui select 与 vue 的结合使用

2019独角兽企业重金招聘Python工程师标准>>> 1. 创建一个select元素 <form class"layui-form layui-form-pane all-account-filter-form"><div class"layui-form-item"><div class"layui-inline"><label class&…

OpenCV 2.2.0 CvvImage的使用

转自&#xff1a;http://blog.csdn.net/raocong2010/archive/2011/01/17/6146158.aspx# 前几日&#xff0c;OpenCV 2.2.0版本出现了...但是...以前版本的CvvImage类不见了...为了能够继续使用这个类&#xff0c;下面把这个类的源代码贴出来&#xff0c;使用的时候将该代码加入到…

c/c++标准预定义宏

转自&#xff1a;http://www.eefocus.com/andysun001/blog/10-06/192018_008b3.html 一、标准预定义宏The standard predefined macros are specified by the relevant language standards, so they are available with all compilers that implement those standards. Older c…

阿里AI攻克心血管识别技术,冠脉中心线提取论文入选国际医学影像会议

阿里在医疗AI领域取得新进展&#xff0c;继创下肺结节检测、肝结节诊断技术的重大突破后&#xff0c;又攻克了难度系数更高的心血管识别技术。 近日&#xff0c;阿里达摩院机器智能实验室有关冠状动脉中心线提取的论文已被国际顶级医学影像会议MICCAI 2019提前接收。 阿里AI论…

自由程序员在国外

可靠的做法是&#xff0c;在一些像oDesk这样的网站上找一些临时开发任务&#xff0c;在Linked In网站上提交一份个人简历。这样将有助于你在出行后尽早的找到可干的项目&#xff0c;而不必到时大减价来抢其他程序员的活儿(或消减自己的预算)。 从来不缺乏你可以捐赠代码的开源项…

关于spring aop Advisor排序问题

关于spring aop Advisor排序问题 当我们使用多个Advisor的时候有时候需要排序&#xff0c;这时候可以用注解org.springframework.core.annotation.Order或者实现org.springframework.core.Ordered接口。 示例代码&#xff1a; import org.aspectj.lang.ProceedingJoinPoint; im…