• 黑马程序员_<<GUI(图形用户界面)--------1>>


    --------------------ASP.Net+Android+IOS开发.Net培训、期待与您交流! --------------------


    1.  GUI图形用户界面

    1.简述

    Graphical Interface(图形化用户接口),用图形的方式,来显示计算机操作的界面,这样方便更直观。

    2.CLI:Command Userainterface(命令行用户接口)

    就是常见的Dos命令操作

    3.Java为GUI提供了对象都存在java.Awt和javax.Swing两个包中

     Awt和Swinf区别

     Java.Awt:Abstract Window ToolKit(抽象窗口工具包)需要调用本地系统方法实现功能。属重量级控件

     Javax.Swing:在AWT的基础上,建立的一套图形界面系统,其中提供了更多的组建,而且完全由java实现,增强了移植性,属于轻量级控件。

    2.布局

    容器中的组件的排放方式,就是布局。

    1.  Flowlayout流式布局  从左向右的顺序排列 Panel默认的布局默认管理器

    2.  BorderLayout(边界布局管理器) 东 南 西 北中 Frame默认的布局管理器

    3.  Gridlayout(网络布局管理器) 规则额矩阵

    4.  GridBaglayout(网格包布局管理器) 非规则的矩阵

    5.  Gradlayout(卡片布局管理器)  选项卡

     

    3.创建图形化界面



         1.创建Frame窗体

         2.对窗体进行基本设置:大小,位置和布局

         3.定义要添加的组件

         4.将组件添加到窗体中

         5.显示窗体

     

    import java.awt.Button;
    import java.awt.FlowLayout;
    import java.awt.Frame;
     
    public class FrameDemo {
       public static void main(String[] args) {
         Frame f = new Frame("MY");
         f.setSize(500, 400);// 设置大小
         f.setLocation(300, 200);// 设置位置
         f.setLayout(new FlowLayout());// 设置布局是流水式布局
         Button b = new Button("第一个Button");// 定义一个Button按钮
         f.add(b);// 将Button空间添加到窗体上
         f.setVisible(true);// 设置窗体可见
       }
     
    }


    4.监听器

    事件源:awt或者swing包中的那些图形界面组件

    事件:每一个事件源都有自己特有的对应事件和共性事件

    监听器;将可以触发某一个事件的动作(不只是一个工作)都已经封装到了监听器中

    他们之间的关系:

    把监听器安装事件源上,然后外部动作触发事件源,然后产生把其封装成对象传给监听器 ,然后触发其中的事件,做出相应的动作。

     

       

     import java.awt.Button;
    import java.awt.FlowLayout;
    import java.awt.Frame;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
     
    public class FrameDemo {
       public static void main(String[] args) {
         Frame f = new Frame("MY");
         f.setSize(500, 400);// 设置大小
         f.setLocation(300, 200);// 设置位置
         f.setLayout(new FlowLayout());// 设置布局是流水式布局
         Button b = new Button("第一个Button");// 定义一个Button按钮
         f.add(b);// 将Button空间添加到窗体上
         f.setVisible(true);// 设置窗体可见
         /*
          * 添加监听器,里面的参数是WindowListener,但是其有7个抽象方法,我我只用其中的一个方法,
          * 那么我们重写其他方法的话,太麻烦,所以我们找到了已经实现好的子类:WindowAdapter,这样我们需要什么方法就重写什么方法
          */
         f.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {// 关闭事件
              System.out.println("关闭窗口");
              System.exit(0);// 关闭动作
            }
     
            public void windowActivated(WindowEvent e) {// 窗口激活事件,就是前置窗口
              System.out.println("前置窗口");
            }
         });
       }
     
    }


    5.Action事件

         现在就是Button按钮的事件,现在我们定义一个类,把窗体和事件分开写,这样也便于操作。

         增加Button按钮的监听器的话,那么就在Button类中查找,增加的监听器是addActionListener(ActionListener l),其ActionListener接口中就一个抽象方法,所以不需要使用适配器,之间使用匿名内部类就可以重写其监听的动作。

     

    import java.awt.Button;
    import java.awt.Color;
    import java.awt.FlowLayout;
    import java.awt.Frame;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
     
    public class ActionDemo {
       private Frame ff;// 声明窗体
       private Button bu;// Button按钮
     
       public ActionDemo() {
         init();
       }
     
       public void init() {// 初始化方法
         ff = new Frame("MY—Frame");
         bu = new Button("点击我,关闭");
         bu.setBackground(Color.blue);//设置背景颜色
         ff.setBounds(200, 300, 300, 200);// 设置位置和大小
         ff.setLayout(new FlowLayout());// 设置布局为流水式
         ff.add(bu);// 将Button添加到窗体上
         Action();// 监听器,事件处理
         ff.setVisible(true);// 设置窗体可见
       }
     
       public void Action() {// 事件方法
         /* 设置窗体的监听器 */
         ff.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
              System.out.println("窗体的关闭事件:关闭");
              System.exit(0);
            }
         });
         /* 设置Button的监听器 */
         bu.addActionListener(new ActionListener() {
     
            public void actionPerformed(ActionEvent e) {// Button的事件
              System.out.println("Button的事件:关闭");
              System.exit(0);
     
            }
     
         });
       }
       public static void main(String[] agrs) {
         new ActionDemo();
       }
    }


    6.鼠标和键盘监听器

       

          1.鼠标监听器

    importjava.awt.Button;
    importjava.awt.Color;
    importjava.awt.FlowLayout;
    importjava.awt.Frame;
    importjava.awt.event.ActionEvent;
    importjava.awt.event.ActionListener;
    importjava.awt.event.MouseAdapter;
    importjava.awt.event.MouseEvent;
    importjava.awt.event.WindowAdapter;
    importjava.awt.event.WindowEvent;
     
    publicclass MouseDemo {
     
       private Frame ff;// 声明窗体
       private Button bu;// Button按钮
     
       public MouseDemo() {
          init();
       }
     
       public void init() {// 初始化方法
          ff = new Frame("MY—Frame");
          bu = new Button("点击我,关闭");
          bu.setBackground(Color.blue);// 设置背景颜色
          ff.setBounds(200, 300, 300, 200);// 设置位置和大小
          ff.setLayout(new FlowLayout());// 设置布局为流水式
          ff.add(bu);// 将Button添加到窗体上
          Action();// 监听器,事件处理
          ff.setVisible(true);// 设置窗体可见
       }
     
       public void Action() {// 事件方法
          /* 设置窗体的监听器 */
          ff.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e){
               System.out.println("窗体的关闭事件:关闭");
               System.exit(0);
            }
          });
          /* 设置Button的监听器 */
          bu.addActionListener(new ActionListener(){
     
            public void actionPerformed(ActionEvente) {// Button的事件
               System.out.println("活动事件");
            }
     
          });
          /* 给Button增加了鼠标监听器,因为Button是compontent子类,那么增加的监听器方法在compontent类中 */
          bu.addMouseListener(new MouseAdapter() {//鼠标事件
                  /* 单击,单击事件比活动事件先执行,只要是Button一活动,不管是鼠标还是键盘,都会执行 */
                  public voidmouseClicked(MouseEvent e) {// 默认的是单击
     
                     /*
                      * if (e.getClickCount() == 2) {
                      * System.out.println("双击"); }
                      */
     
                     System.out.println("单击执行");
     
                  }
     
                  /* 移动事件 */
                  public void mouseEntered(MouseEvente) {
                     System.out.println("移动到Button上");
                  }
               });
     
       }
     
       public static void main(String[] args) {
          new MouseDemo();
       }
     
    }


          2.键盘监听器

     

    import java.awt.Button;
    import java.awt.Color;
    import java.awt.FlowLayout;
    import java.awt.Frame;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.KeyAdapter;
    import java.awt.event.KeyEvent;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
     
    public class KeyDemo {
     
       private Frame ff;// 声明窗体
       private Button bu;// Button按钮
     
       public KeyDemo() {
         init();
       }
     
       public void init() {// 初始化方法
         ff = new Frame("MY—Frame");
         bu = new Button("点击我,关闭");
         bu.setBackground(Color.blue);// 设置背景颜色
         ff.setBounds(200, 300, 300, 200);// 设置位置和大小
         ff.setLayout(new FlowLayout());// 设置布局为流水式
         ff.add(bu);// 将Button添加到窗体上
         Action();// 监听器,事件处理
         ff.setVisible(true);// 设置窗体可见
       }
     
       public void Action() {// 事件方法
         /* 设置窗体的监听器 */
         ff.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
              System.out.println("窗体的关闭事件:关闭");
              System.exit(0);
            }
         });
         /* Button添加键盘监听器 */
         bu.addKeyListener(new KeyAdapter() {
            public void keyPressed(KeyEvent e) {// 按下事件
              /* 按下ESC键,关闭窗口 */
              if (e.getKeyCode() == KeyEvent.VK_ESCAPE) {
                 System.out.println("ESC键,关闭");
                 System.exit(0);
              }
              /*
               * 组合键,在KeyEvevt的父类:InputEvent中,
               * 有isControlDown就是Ctrl键是否按下,还有判断其他的键是否按下下面Ctrl+Enter键,就数组“组合键”
               */
              if (e.isControlDown() & e.getKeyCode() == KeyEvent.VK_ENTER)
                 System.out.println("组合键");
            }
         });
       }
     
       public static void main(String[] args) {
         new KeyDemo();
     
       }
     
    }


    对文本框设置键盘监听器:文本框中只能输入数字

    思路:

      1.在窗体上添加一个文本框

      2.对文本框添加键盘监听器

      3.判断按下的键,如果符合添加默认输入,如果不符合条件则使用KeyEvent的父类InputEvent中的consume()方法取消默认事件。

     

    public class TextFieldDemo {
       private Frame ff;// 声明窗体
       private TextField text;// 声明文本框
     
       public TextFieldDemo() {
         init();
       }
     
       public void init() {// 初始化方法
         ff = new Frame("MY—Frame");
         text = new TextField(10);// 长度是10列
        
         ff.setBounds(200, 300, 300, 200);// 设置位置和大小
         ff.setLayout(new FlowLayout());// 设置布局为流水式
         ff.add(text);//添加到框架中
         Action();// 监听器,事件处理
         ff.setVisible(true);// 设置窗体可见
       }
     
       public void Action() {// 事件方法
         /* 设置窗体的监听器 */
         ff.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
              System.out.println("窗体的关闭事件:关闭");
              System.exit(0);
            }
         });
         /*为文本框添加键盘监听器*/
         text.addKeyListener(new KeyAdapter(){
            public void keyPressed(KeyEvent e){//按下事件
              int key=e.getKeyCode();
              if(!(key>=KeyEvent.VK_0 && key<=KeyEvent.VK_9)){
                 e.consume();//不执行默认动作,就是不添加到文本框中
              }
            }
         });
     
       }
     
       public static void main(String[]args) {
         new TextFieldDemo();
     
       }
     
    }


    7.列出目录内容-练习

         

     

    import java.awt.Button;
    import java.awt.FlowLayout;
    import java.awt.Frame;
    import java.awt.TextArea;
    import java.awt.TextField;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
    import java.io.File;
     
     
    public class DirDemo {
     
       private Frame ff;
       private TextField text;
       private Button bu;
       private TextArea area;
       public DirDemo(){
         init();
       }
       /*初始化方法*/
       public void init(){
         /*窗体设置*/
         ff=new Frame("查看目录列表");
         ff.setSize(400, 500);//设置大小
         ff.setLocation(300, 200);//设置位置
         ff.setLayout(new FlowLayout());//设置布局
        
         /*TextField设置*/
         text=new TextField(40);//初始化的时候指定列
         ff.add(text);//添加到窗体上
         /*Button设置*/
         bu=new Button("转到");
         ff.add(bu);//添加到窗体上
         /*TextArea 设置*/
         area=new TextArea(20,50);
         ff.add(area);//添加到窗体上
         myEvent();
         ff.setVisible(true);//设置显示
       }
       /*监听器和事件*/
       public void myEvent(){
         /*设置窗体监听器*/
         ff.addWindowListener(new WindowAdapter(){
            public void windowClosing(WindowEvent e){//关闭事件
              System.out.println("窗体关闭");
              System.exit(0);
            }
         });
         /*设置Button的监听器*/
         bu.addActionListener(new ActionListener(){
     
            public void actionPerformed(ActionEvent e) {//活动事件
              String url=text.getText();//或得TextField中的信息
              area.setText("");
              File dir=new File(url);
              int count=0;
              if(dir.isDirectory()){
                 String [] fileNames=dir.list();
                 for(String name:fileNames){
                   count++;
                   area.append((new Integer(count)).toString()+":-");
                   area.append(name);
                   area.append("
    ");
                  
                 }
              }else{
                 area.setText("您输入的路径不是一个文件目录");
              }
              text.setText("");
             
            }
           
         });
       }
       public static void main(String[] args) {
         new DirDemo();
     
       }
     
    }
     
     


    结果:


    --------------------ASP.Net+Android+IOS开发.Net培训、期待与您交流! --------------------

  • 相关阅读:
    CF 149D Coloring Brackets(区间DP,好题,给配对的括号上色,求上色方案数,限制条件多,dp四维)
    hdu 4607 树形dp 树的直径
    poj 2955 区间dp入门题
    poj 2139 flord水题
    poj 2377 最大生成树
    lightoj 1422 区间dp
    模拟类似括号匹配
    nyoj 33 蛇形填数
    nyoj 2 括号配对问题水
    Hackonacci Matrix Rotations 观察题 ,更新了我的模板
  • 原文地址:https://www.cnblogs.com/riskyer/p/3358147.html
Copyright © 2020-2023  润新知