关于为图形界面添加接口和事件监听机制的一点想法
         在讲接口之前简单说一下登录界面实现的过程吧,毕竟不是很熟悉权当复习了:
   一、首先你得有一堆已经可以用来生成登录界面的代码。
           这部分代码还是有点难度的(反正对我这个菜鸡挺难),不过后来多次的实现我逐渐记下了这个顺
序。         
          
        1. 首先要做的是引入一系列SWING,AWT组件,当然这个过程可以用“ctrl+o”实现,
做一步用一步即可;
        2.然后就是开始创建一个窗体:JFrame frame=new JFrame();
        3. 接着设置这个窗体的属性。大致的顺序依次为:标题,大小,显示位置,关闭操作

(“初标大显闭”) 
 
      eg: 
 
        JFrame frame=new JFrame(); 
 
  frame.setTitle("党课考试界面");//设置标题 
 
  frame.setSize(600,500);//设置大小 
 
  frame.setLocationRelativeTo(null);//显示位置 
 
  frame.setDefaultCloseOperation(3);//关闭操作


  
     4.现在你已经有了一个具备上述属性的窗体,也就是说已经有了一个可以放东西的地方
了。但这还不够,就像一张空白的纸,不做点什么是没什么意义的。所以你应该想到的是给它加点有趣的
东西。
   
             加上去的东西怎么放呢?没有规则的乱画是不好的,所以添加东西前有必要给窗体声明一下布
局了。最常用的布局有“流式布局”。具体的定义挺多的,我的理解就是:这种布局像流水一样,水满则
溢,也就是说只有在一行满了之后才会换行,中途如果没满是不可能换行的。
 

eg:FlowLayout f2=new FlowLayout(FlowLayout.CENTER); 
 
  frame.setLayout(f2); 
 
   
 
   5.然后接下来就是一些添加各种元素组件的时候了。标签元素(图片&文字),文本输入框, 
 
 密码输入框,按钮等等。有点跑题了,此处具体操作如下: 
 
      
 
      ImageIcon img =new ImageIcon("C:\\Users\\john\\Desktop\\tu\\1508305257974. 
 
      jpeg"); 
 
    //实例化标签元素组件类的对象,显示img图标对象 
 
  JLabel heihei=new JLabel(img); 
 
  frame.add(heihei); //将heihei添加到窗体上 
 
   
 
  JLabel ctName=new JLabel("账号:"); 
 
  frame.add(ctName);   
 
   
 
  JTextField zhName=new JTextField(20); 
 
  frame.add(zhName); 
 
   
 
  JLabel mName=new JLabel("密码:"); 
 
  frame.add(mName); 
 
  JPasswordField mmName=new JPasswordField(20); 
 
  frame.add(mmName); 
 
   
 
   JButton button1=new JButton("登陆"); 
 
  frame.add(button1); 
 
  JButton button2=new JButton("取消"); 
 
  frame.add(button2); 
 
   
 
  6.最后的最后是很重要的一步,你创建好的东西能不能被看到就看这里了。 
 
    frame.setVisible(true);  
 
   
 
二、接口?新世界的大门!  
 
        所谓的“接口”,其实可以理解为通向新世界的大门。 
 
        你把每一扇门都搬到程序中,你就有了让程序进入新世界的可能性。 
 
        
 
       (1)  java的库中已经给了我们种类繁多的接口,负责链接不同的功能。当我们需要某一个接口时, 
 
只需要 
 
         public 类名 implement 接口1名,接口2名....{} 
 
即可。(重要的事情说三遍:类的继承extends   接口的继承implements 
 
                                                               类的继承extends   接口的继承implements 
 
                                                               类的继承extends   接口的继承implements) 
 
                  
 
                  
 
                  当然,除了直接用已经存在的接口,我们也可以自己去开辟一些新的东西,也就是自己去造一道 
 
 门走向新的地方。此时我们需要自己来定义接口。 
 
               格式:   public interface接口名 extends 另一个接口名{  / 
 
                   public static final 数据类型   数据名= ; 
 
                   public abstract 返回类型   方法名(数据类型 数据); 
 
                        }//是的定义了名字就可 
 
              
 
        PS:1.自己的接口还可以再接上别的接口?? (门里有门,不可以吗?) 
 
            2.定义的方法必须要说明是abstract,而且有名字就好。(毕竟造一道门没必要告诉人怎 
 
么走路对吧,有个门就行了) 
 
            3.为什么数据的类型前必须有个static final呢?因为门上有什么花纹是造门的人当时就 
 
已经设计好的了,一般是不允许改变的。所以用static来限制;final是说它已经是最后一层数据了,是 
 
不能再被继承了。(也就是这个数据不能被覆盖,但是接口是可以继承的。接口本来就是用来继承的) 
 
            4.接口不能用来实例化对象,它就是个抽象的东西。 
 
                                   而且访问修饰符只有public。因为如果父类都是protected或者别的类型,你让子类怎么 
 
愉快地玩耍?所以用的是public。                                   
 
         
 
         
 
         (2) 现在我们已经有了进入新世纪的可能性了,但是仅仅只是可能,要打开门就得先有钥匙。 
 
                   配钥匙的过程————就是把接口的抽象方法重写得具体的过程。也就是在新的类里把函数体补全。 
 
                      ( 具体过程在下面监听机制中再实现 
 
         
 
         (3)监听机制: 
 
               首先得知道三个名词 
 
            1.事件源对象:容器组件,元素组件都可以成为事件源对象; 
 
                                                                (动作发生在哪一个组件上,该组件就是事件源对象) 
 
                                     
 
            2.事件监听方法:捕获事件源对象上动作的方法 
 
              
 
            3.事件接口:处理事件监听方法捕获的动作   
 
          
 
            然后大致的操作步骤如下: 
 
            1. 为了接受并处理某类用户事件,组件得先注册相应的事件处理程序,这种程序也就是 
 
Listener。 它是实现了对应监听程序接口的一个类。(嗯已经实现好了)例如:为了处理按钮上的 
 
ActionEvent(类)事件,首先需要定义一个实现ActionListener接口的监听程序类。 
 
                 注册的格式:组件名.addXXXXListener(XXXXListener) 
 
   
 
  例如:假设组件是个JButton型的a,想要注册动作类的事件。首先在“界面类”中这样写: 
 
       a.addActionListener(new HHHHH()); 
 
                  注:HHHHH必须是实现了ActionListener接口or继承了ActionListener的另一个类, 
 
                  且方法体也写好了。 
 
    这样就算已经注册好了。 
 
           
 
             b.public HHHH{ 
 
               public void actionPerformed(ActionEvent e){ 
 
                          public...希望实现的操作1,操作2... 
 
                  } 
 
             } 
 
                                        这部分代码是在“监听机制类”中写的,做的就是发生了e这个事件时就会触发操作,是 
 
                                        不是很神奇! 
 
              
 
             c.一开始学习可能会在思考上有个难点,就是怎么样把这个动作监听的东西和被监听的东 
 
             西联系起来?其实a的那一行已经已经帮我们处理好这个问题了,电脑内部怎么操作就不用操心了。 
 
             
 
             在上面的几步都完成之后,我们就有了一个完整的监听机制。 
 
             
 
             下面给出代码实例: 
 
             这部分代码做的是:在登录界面上输入账号和密码,然后点击登录按钮,根据输入的账号和密码进 
 
             行验证,如果正确则运行initUI12,显示新窗体并关闭登录窗体,如果错误initUI11显示错误窗体 
 
             public class ButtonListener implements ActionListener { 
 
          public JFrame a; 
 
          public JTextField b; 
 
             public JPasswordField c; 
 

            public void setJFrame(JFrame pp) { 
 
          a = pp; 
 
              } 
 

            public void setJText(JTextField pp) { 
 
             b = pp; 
 
                 } 
 

            public void setJPass(JPasswordField pp) { 
 
       c = pp; 
 
           } 
 

            public void actionPerformed(ActionEvent e) { 
 
       String n = b.getText(); 
 
       String m = new String(c.getPassword()); 
 

         if (n.equals("123456") && m.equals("111111")) { 
 
        initUI12();//initUI12是登陆成功的界面 
 
           } else 
 
     initUI11();//initUI11是登陆失败的界面 
 
           } 
 
           
 
           
 
           然后在主界面类中,实例化ButtonListener并给登陆按钮注册这个监听方法,代码如下: 
 
           ButtonListener bl=new ButtonListener(); 
 
        bl.setJFrame(frame); 
 
           bl.setJText(zhName); 
 
        bl.setJPass(mmName); 
 
   
 
   
 
        button1.addActionListener(bl);


       
            
             代码很简单,就不过多赘述了
            
             注:有时候给监听方法传递内容时需要用到图形化的函数。这部分函数是SWING或者AWT内已经提供
             给我们的,有必要时可自行百度
            
             谢谢观看。
            
            
                                                                  THE END