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

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

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("");      //清空结果框    }

Java 基础【04】Swing 组件事件注册相关推荐

  1. java swing 注册_Java 基础【04】Swing 组件事件注册

    聪明出于勤奋,天才在于积累.--华罗庚 对上次的三个问题的个人理解: 1) 程序首先是从main函数开始执行的,假设main 函数不是 static ,就要先实例化这个类,然后调用 main 方法,这 ...

  2. 【重难点】【Java基础 04】值传递和引用传递、序列化和反序列化

    [重难点][Java基础 04]值传递和引用传递.序列化和反序列化 文章目录 [重难点][Java基础 04]值传递和引用传递.序列化和反序列化 一.值传递和引用传递 1.对比 二.序列化 1.基本概 ...

  3. java学习之Swing组件学习

    java学习之Swing组件学习 1.笔记 2.代码 3.最终页面 1.笔记 一.java提供了三个主要包做GUI开发 java.awt ----提供字体/页面布局管理器 javax.swing–提供 ...

  4. java基础学习——Swing图形化用户界面编程

    GUI概述 早期计算机系统中,电脑向用户提供的是单调.枯燥.纯字符状态的"命令行界面(CLI)".就是到现在,我们还可以依稀看到它们的身影:在Windows中开个DOS窗口,就可看 ...

  5. java 画笔跟swing组件_「软帝学院」:2019思维最清晰的java学习路线

    第一步 首先要做好学习前的准备工作:java语言一般用于大型的服务器程序开发,所有有必要了解如下内容:Unix开发环境Unix系统原理.Unix开发环境.Unix常用命令.熟练掌握Unix常用命令:熟 ...

  6. (JAVA)使用swing组件模仿QQ界面+网络编程实现QQ消息传输

    直接贴当时的实验报告吧. 1.课程题目 模仿腾讯QQ实现一个即时聊天软件,可以进行好友管理以及私聊等功能. 1.1功能性分类 功能类别 功能名称.标识符 描述 用户信息 用户登陆 用户登陆 用户注册 ...

  7. java的setbounds_java Swing组件setBounds()简单用法实例分析

    本文实例讲述了java Swing组件setBounds()简单用法.分享给大家供大家参考,具体如下: 先看API: public void setBounds(Rectangle r) 移动组件并调 ...

  8. java 画笔跟swing组件_Java学习教程(基础)--Java版本历史(二)

    Java语言自JDK1.0版本以来经历了许多次更新,也在基本程序库中增加了大量的类别和包.从J2SE 1.4开始,Java语言的变动由 Java Community Process(JCP)管理,JC ...

  9. java 画笔跟swing组件_java组件及事件处理(简单基础的界面操作)1

    尽管Java的优势是网络应用方面,但Java也提供了强大的用于开发桌面程序的API,这些API在javax.swing包中,对此,本文章将先介绍一部分Java界面处理的简单操作. 1.Java Swi ...

最新文章

  1. 节流与防抖【从0到0.1】
  2. 第十六届智能车竞赛参赛队伍提问-6-11
  3. 汇编 整数变量 浮点数变量 符号常量
  4. python常用异常处理
  5. 我居然从一只猫身上学到了斐波那契数列
  6. 盘点黑客与程序员的十大区别
  7. 原子自增_小学妹教你并发编程的三大特性:原子性、可见性、有序性
  8. 3.指定IP地址抓包
  9. mysql朋友圈设计_微信朋友圈技术实现设想
  10. 库卡profinet通讯中文说明书
  11. 用html创建数独,数独做不出来怎么办
  12. 比较好用的学习、工具网站推荐
  13. 充电水滴融合特效 html+css
  14. connect holder is null问题记录
  15. STM32 Combined PWM的用法
  16. pandas数据分组聚合——groupby()、aggregate()、apply()、transform()和filter()方法详解
  17. 网络线综合布线接地注意事项
  18. 【AI视野·今日CV 计算机视觉论文速览 第172期】Tue, 10 Dec 2019
  19. unity能连jsp吗_使用JSPWiki丰富Unity-UPM包的使用
  20. Mapper(XML)文件不识别大于号 小于号

热门文章

  1. 【Win32 API学习]打开可执行文件
  2. Win10 | Mac 在server上统一办公
  3. 快速浏览Silverlight3 Beta:当HLSL遇上Silverlight
  4. MySQL数据类型--------字符串类型实战
  5. linux如何卸载挂载文件
  6. ppt文本框显示缺字,信息显示不全
  7. 拿到WP官方主题Twenty Ten就是一顿nofollow伺候
  8. 基于流式的md5计算-多线程下载工具Lwget介绍
  9. 值得收藏的146条经典民间偏方
  10. 2020-mb面试指南_2020年最佳代码面试准备平台