当前位置:  编程技术>java/j2ee

深入java事件注册的应用分析

    来源: 互联网  发布时间:2014-10-25

    本文导语:  对上次的三个问题的个人理解: 1) 程序首先是从main函数开始执行的,假设main 函数不是 static ,就要先实例化这个类,然后调用 main 方法,这似乎是不现实的. 其次 用 static 修饰的 main 方法是存储在静态的存贮区当中的,也就...

对上次的三个问题的个人理解:
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("");    //清空操作数1
            operand2.setText("");    //清空操作数2
            result.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("");    //清空操作数1
            operand2.setText("");    //清空操作数2
            result.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("");    //清空操作数1
            operand2.setText("");    //清空操作数2
            result.setText("");      //清空结果框   
       }


    
 
 

您可能感兴趣的文章:

  • 深入分析C#中处理和键盘相关事件的详解
  • 深入C#任务管理器中应用程序选项隐藏程序本身的方法详解
  • 大家能否深入探讨一下J2EE到底包含那些东东,在实际企业应用是否如同J2EE所承诺的一样!
  • 深入Resource实现多语言支持的应用详解
  • 深入多线程之:用Wait与Pulse模拟一些同步构造的应用详解
  • [献给想深入学习Linux开发的网友] Linux 应用程序开发到内核开发的简明指南
  • 深入理解卡特兰数及其应用
  • 深入探讨C++父类子类中虚函数的应用
  • 深入理解C++的动态绑定与静态绑定的应用详解
  • 深入理解Java对象的序列化与反序列化的应用
  • Android笔记之:深入ViewStub的应用
  • 深入分析Android ViewStub的应用详解
  • 索引在Oracle中的应用深入分析
  • Android 静默方式实现批量安装卸载应用程序的深入分析
  • 深入Android 五大布局对象的应用
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Docker支持更深入的容器日志分析
  • 关于《深入浅出MFC》
  • Linux有没有什么好的高级的书,我要深入,
  • 深入理解linux内核
  • [100分]有没有关于binutils的深入的资料?或者深入底层的资料?
  • 深入理解PHP内核 TIPI
  • 想深入学习Java应该学习哪些东西
  • 哪位有《JSP深入编程》电子版?
  • 想要深入学习LINUX该学什么?
  • 100分求:哪儿有《深入理解linux内核》可供下哉!
  • 如何深入Linux的内核学习?
  • U-BOOT得掌握到什么程序,用不用深入去学
  • 想深入了解操作系统该怎么做
  • 前一阵子学习了shell脚本,如果想深入点了解linux可以看什么书呢
  • 问一个《深入理解计算机系统》中的问题
  • 深入多线程之:深入分析Interlocked
  • ##想买书深入学习linux下的编程,请指教
  • 深入JDBC sqlserver连接写法的详解
  • 深入oracle特定信息排序的分析
  • 深入分析C中不安全的sprintf与strcpy
  • 哪儿有下载《深入理解Linux内核》这本书?(中文)


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3