黑马程序员--GUI

来源:互联网 发布:酷狗铃声截取软件 编辑:程序博客网 时间:2024/06/08 09:01

------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------



GUI 图像化界面



GUI:Graphical UserInterface(图形用户接口)。

用图形的方式,来显示计算机操作的界面,这样更方便更直观。

 

CLI:Command line UserInterface (命令行用户接口)

就是常见的Dos命令行操作。

需要记忆一些常用的命令,操作不直观。

 

Java为GUI提供的对象都存在java.Awt,java.Swing两个包中。

Awt与Swing:

         java.Awt:AbstractWindow ToolKit (抽象窗口工具包),属于重量级工具包,

         java.Swing:属于轻量级工具包,在awt的基础上建立了一套图像处理系统,增强了移植性。(跨平台)

 

继承关系图:

 


 

布局管理器

 

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

常见的布局管理器:

FlowLayout(流式布局管理器)//目前最常用的

从左到右的顺序排列。

Panel默认的布局管理器。

BorderLayout(边界布局管理器)

东,南,西,北,中

Frame默认的布局管理器。

GridLayout(网格布局管理器)

规则的矩阵

CardLayout(卡片布局管理器)

选项卡

GridBagLayout(网格包布局管理器)

非规则的矩阵

 

使用方法:newframe().setLayout(newFlowLayout());

 

创建一个简单的图形化界面:

 

 创建图形化界面。

  1,创建frame窗体。

  2,对窗体进行设置。

                比如大小,位置,布局。

  3,定义组件。

  4,将组件通过窗体的add 方法添加到窗体中。

  5,让窗体显示,通过setVisible(true);

  

package com.itheima;

 

import java.awt.FlowLayout;

import java.awt.Frame;

 

public class FrameDemo {

    public static void main(String[] args) {

       //创建一个Frame对象。

       Frame f = new Frame();

       //设置Frame的大小,长宽。

       f.setSize(300, 200);

       f.setLocation(500,300);

       //设置Frame的布局方式。

       f.setLayout(new FlowLayout());

       //设置可见性。

       f.setVisible(true);

      

    }

}  

 

通过上面的这个例子我们发现,窗口并不具备关闭功能,那么这是就需要添加事件监听机制了。

 

事件监听机制

   事件监听机制的特点。

   1,事件源。

   2,事件。

   3,监听器。

   4,事件处理。

 

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

 

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

 

   监听器:将可以触发某一个事件的动作(不止一个动作)都已经封装到了监听器中。

 

   以上三者,在java中都已经定义好了。

   直接获取其对象来用就可以了。

 

   我们要做的事情是,就是对产生的动作进行处理。

 

事件监听机制流程图:



确定事件源(容器或组件)

通过事件源对象的addXXXListener()方法将侦听器注册到该事件源上。

该方法中接收XXXListener的子类对象,或者XXXListener的子类XXXAdapter的子类对象。

一般用匿名内部类来表示。

在覆盖方法的时候,方法的参数一般是XXXEvent类型的变量接收。

事件触发后会把事件打包成对象传递给该变量。(其中包括 事件源对象。通过getSource()或者,getComponent()获取。)

 

示例:

package com.itheima;

 

import java.awt.*;

import java.awt.event.*;

 

 

public class FrameDemo2 {

    public static void main(String[] args) {

       //设置窗体

       Frame f = new Frame();

       f.setSize(300,200);

       f.setLayout(new FlowLayout());

       f.setVisible(true);

       //新建允许编辑单行文本的文本组件

       TextField tf = new TextField(32);

       //新建按钮

       Button but = new Button("按钮");

       Button but2 = new Button("按钮2");

       //构造一个新文本区,该文本区具有指定的行数和列数

       TextArea ta = new TextArea(5, 32);

       //设置为只读

       ta.setEditable(false);

       //将组件添加到窗体

       f.add(tf);

       f.add(but);

       f.add(but2);

       f.add(ta);

       //添加窗口监听器。

       f.addWindowListener(new WindowAdapter() {

           //关闭事件源。

           @Override

           public void windowClosing(WindowEvent e) {

              // TODO Auto-generated method stub

              System.exit(0);

           }

       });

 

       //创建鼠标监听器。

       but.addMouseListener(new MouseAdapter() {

           intcount=0;

           intcount2=0;

           @Override

           //单击新建窗口。

           public void mouseClicked(MouseEvent e) {

              // TODO Auto-generated method stub

              System.out.println("鼠标单击组件"+(++count)+"");

              if(e.getClickCount()==2){

                  System.out.println("鼠标双击组件"+(++count2)+"");

              }

           }

       });

       but.addMouseListener(new MouseAdapter() {

           intcount=0;

           @Override

           public void mouseEntered(MouseEvent e) {

              // TODO Auto-generated method stub

              System.out.println("鼠标进入组件"+(++count)+"");

           }

       });

       but2.addKeyListener(new KeyAdapter() {

           @Override

           public void keyPressed(KeyEvent e) {

              // TODO Auto-generated method stub

              //使用esc键退出

              if(e.getKeyChar()==Event.ESCAPE)

                  System.exit(0);

              System.out.println(e.getKeyChar());

              //使用组合键退出

              if(e.isControlDown() &&e.getKeyCode()==Event.ENTER){

                  System.out.println("Ctrl+Entry组合键关闭了。");

                  System.exit(0);

              }

           }

       });

       tf.addKeyListener(new KeyAdapter() {

           @Override

           public void keyPressed(KeyEvent e) {

              // TODO Auto-generated method stub

              //测试键位是否违法。

              if(!(e.getKeyChar()>='0' &&e.getKeyChar()<='9')){

                  System.out.println(e.getKeyCode());

                  ta.append(e.getKeyChar()+"是违法的");

                  ta.append("\r\n");

              }

              super.keyPressed(e);

           }

       });

    }

}

 

示例二:打印出文件夹中文件

package com.itheima;

 

import java.awt.*;

import java.awt.event.*;

import java.io.File;

 

public class FrameDemo3 {

    public static void main(String[] args) {

       new MyFrame();

    }

}

class MyFrame{

    private Framef;

    private Buttonb;

    private TextFieldtf;

    private TextAreata ;

    public MyFrame() {

       // TODO Auto-generated constructor stub

       init();

    }

 

    private void init(){

       //设置窗体

       f =new Frame("我的电脑");

       f.setSize(600, 500);

       f.setLayout(new FlowLayout());

       f.setVisible(true);

       b= new Button("转到");

       tf = new TextField(72);

       ta= new TextArea(27, 80);

       ta.setEditable(false);

       f.add(tf);

       f.add(b);

       f.add(ta);

       action();

    }

    private void getFile() {

       String str =tf.getText();

       File file = new File(str);

       //判断是否是正确地址

       if(file.exists() &&file.isDirectory()){

           //打印前清屏

           ta.setText("");

           String[] names = file.list();

           for (Stringname : names) {

              ta.append(name+"\r\n");

           }

       }else{

           ta.setText("输入路径错误"+file);

       }

    }

    private void action() {

       // TODO Auto-generated method stub

       f.addWindowListener(new WindowAdapter() {

           //设置窗口关闭

           @Override

           public void windowClosing(WindowEvent e) {

              // TODO Auto-generated method stub

              System.exit(0);

           }

       });

       tf.addKeyListener(new KeyAdapter() {

           @Override

           public void keyPressed(KeyEvent e) {

              // TODO Auto-generated method stub

              //当敲入entry后执行

              if(e.getKeyChar()==KeyEvent.VK_ENTER){

                  //得到输入的文件地址

                  getFile();

              }

           }

       });

       b.addMouseListener(new MouseAdapter() {

           @Override

           public void mouseClicked(MouseEvente) {

              // TODO Auto-generated method stub

                  getFile();

           }

       });

    }

}

Dialog:

是一个带标题和边界的顶层窗口,构造方法:

Dialog(Frame owner, String title, boolean modal) :构造一个最初不可见的Dialog,它带有指定的所有者Frame、标题和模式,当modal为true时不能点击底层窗口,为false时可以。

示例:优化FrameDemo3程序,将文字提醒换为窗口提醒。

package com.itheima;

 

import java.awt.*;

import java.awt.event.*;

import java.io.File;

 

public class DialogDemo {

    public static void main(String[] args) {

       new MyFrame2();

      

    }

}

class MyFrame2{

    private Dialogd;

    private Framef;

    private Buttonb;

    private Buttonokb;

    private TextFieldtf;

    private TextAreata ;

    private Labellab;

//  private String str;

    public MyFrame2() {

       // TODO Auto-generated constructor stub

       init();

    }

    private void init(){

       //设置窗体

       f =new Frame("我的电脑");

       f.setSize(600, 500);

       f.setLayout(new FlowLayout());

       f.setVisible(true);

       d = new Dialog(f,"输入错误",true);

       d.setSize(100, 100);

       b= new Button("转到");

       tf = new TextField(72);

       ta= new TextArea(27, 80);

       ta.setEditable(false);

       f.add(tf);

       f.add(b);

       f.add(ta);

       fraAction();

//     diaAction();

    }

    private void getFile() {

       String str =tf.getText();

       File file = new File(str);

       //判断是否是正确地址

       if(file.exists() &&file.isDirectory()){

           //打印前清屏

           ta.setText("");

           String[] names = file.list();

           for (Stringname : names) {

              ta.append(name+"\r\n");

           }

       }else{

           str = file+"地址错误";

           diaAction(str);

           d.setVisible(true);

//         d = new Dialog(f, "输入错误", false);

 

       }

    }

    private void fraAction() {

       // TODO Auto-generated method stub

       f.addWindowListener(new WindowAdapter() {

           //设置窗口关闭

           @Override

           public void windowClosing(WindowEvent e) {

              // TODO Auto-generated method stub

              System.exit(0);

           }

       });

       tf.addKeyListener(new KeyAdapter() {

           @Override

           public void keyPressed(KeyEvent e) {

              // TODO Auto-generated method stub

              //当敲入entry后执行

              if(e.getKeyChar()==KeyEvent.VK_ENTER){

                  //得到输入的文件地址

                  getFile();

              }

           }

       });

       b.addMouseListener(new MouseAdapter() {

           @Override

           public void mouseClicked(MouseEvent e) {

              // TODO Auto-generated method stub

                  getFile();

           }

       });

    }

    private void diaAction(String str){

       d.setLayout(new FlowLayout());

       lab = new Label(str);

       okb = new Button("确定");

       d.add(lab);

       d.add(okb);

       d.addWindowListener(new WindowAdapter() {

           @Override

           public void windowClosing(WindowEvent e) {

              // TODO Auto-generated method stub

              d.setVisible(false);

           }

       });

       okb.addMouseListener(new MouseAdapter() {

           @Override

           public void mouseClicked(MouseEvent e) {

              // TODO Auto-generated method stub

              d.setVisible(false);

           }

       });

       okb.addKeyListener(new KeyAdapter() {

           @Override

           public void keyPressed(KeyEvent e) {

              // TODO Auto-generated method stub

              super.keyPressed(e);

           }

       });

    }

}

 

 

菜单:

 

菜单简单应用:

package com.itheima;

 

import java.awt.*;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

 

 

public class MenuDemo {

    public static void main(String[] args) {

       Frame f = new Frame();

       f.setSize(300,200);;

       MenuBar mb = new MenuBar();

       Menu m1new Menu("文件1");

       Menu m2new Menu("文件2");

       Menu m3new Menu("文件3");

       MenuItem mt1 = new MenuItem("选择1");

       MenuItem mt2 = new MenuItem("选择2");

       MenuItem mt3 = new MenuItem("选择3");

      

       mb.add(m1);

       mb.add(m2);

       mb.add(m3);

       m1.add(mt1);

       m1.add(mt2);

       m1.add(mt3);

       f.setMenuBar(mb);

       f.setVisible(true);

      

       f.addWindowListener(new WindowAdapter() {

           @Override

           public void windowClosing(WindowEvent e) {

              // TODO Auto-generated method stub

              System.exit(0);

           }

       });

    }

}




0 0