关于创立图形界面的一点菜鸡的思考

                                                        关于为图形界面添加接口和事件监听机制的一点想法
         在讲接口之前简单说一下登录界面实现的过程吧,毕竟不是很熟悉权当复习了:
   一、首先你得有一堆已经可以用来生成登录界面的代码。
           这部分代码还是有点难度的(反正对我这个菜鸡挺难),不过后来多次的实现我逐渐记下了这个顺
序。         
          
        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

猜你喜欢

转载自blog.csdn.net/weixin_42574142/article/details/80856060