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

来源:互联网 发布:java程序员面试秘笈 编辑:程序博客网 时间:2024/06/06 09:26

--------------------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("\r\n");                           }          }else{             area.setText("您输入的路径不是一个文件目录");          }          text.setText("");                 }            });   }   public static void main(String[] args) {     new DirDemo();    } }  


结果:



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

原创粉丝点击