黑马程序员——GUI篇

------- android培训java培训、期待与您交流! ----------

GUI(图形用户界面)

1、基本概念:

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

CLI:Command line User Interface (命令行用户接口)。就是常见的Dos命令行操作。需要记忆一些常用的命令,操作不直观。

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

2、Awt与Swing

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

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

3、继承关系图

4、布局管理器

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

常见的布局管理器:

FlowLayout(流式布局管理器):从左到右的顺序排列。Panel默认的布局管理器。

BorderLayout(边界布局管理器):东,南,西,北,中(未指定位置的话,将最大面积填充)。Frame默认的布局管理器。

GridLayout(网格布局管理器)规则的矩阵

CardLayout(卡片布局管理器)选项卡

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

最牛的就是坐标式布局,想放哪里就放哪里。

5、建立一个简单的窗体

Container常用子类:Window Panel(面板, 不能单独存在。)

Window常用子类:Frame Dialog

创建图形化界面:

1,创建frame窗体。

2,对窗体进行基本设置。

比如大小,位置,布局。

3,定义组件。

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

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

import java.awt.*;
import java.awt.event.*;
class  AwtDemo
{
    public static void main(String[] args)
    {
        Frame f = new Frame("my awt");
        f.setSize(500,400);//设置窗体横、纵尺寸。
        f.setLocation(400,200);//设置窗体位置:距离左边400,上边200。
        f.setLayout(new FlowLayout());//流式布局。
        f.setVisible(true);//显示窗体。
    }
}

6、事件监听机制

组成:

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

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

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

事件处理(引发事件后处理方式)

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

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

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

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

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

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

活动监听部分代码:

f.addWindowListener(new WindowAdapter(){
            public void windowClosing(WindowEvent e)
            {
                System.out.println("我关!");
                System.exit(0);
            }
            public void windowActivated(WindowEvent e)
            {
                System.out.println("我活了!!");
            }
            public void windowOpened(WindowEvent e)
            {
                System.out.println("我被打开了,哈哈哈");
            }

        });

-------------------------------------------------

实例代码:

通过按钮关闭窗体。在窗体中通过按钮创建按钮。

import java.awt.*;
import java.awt.event.*;
class FrameDemo
{
    //定义该图形中所需的组件的引用。
    private Frame f;
    private Button but;
    FrameDemo()
    {
        init();
    }
    public void init()
    {
        f = new Frame("my frame");

        //对frame进行基本设置。
        f.setBounds(300,100,500,400);//设置frame的 x 和 y 指定左上角的新位置,由 width 和 height 指定新的大小。
        f.setLayout(new FlowLayout());
        but = new Button("my button");
        //将组件添加到frame中
        f.add(but);
        //加载一下窗体事件。
        myEvent();
        //显示窗体。
        f.setVisible(true);
    }
    private void myEvent()
    {
        f.addWindowListener(new WindowAdapter(){

            public void windowClosing(WindowEvent e)
            {
                System.exit(0);
            }
        });
        //让按钮具备退出程序的功能。
        /*

        按钮就是事件源。
        选择哪个监听器呢?
        通过关闭窗体示例,了解到,想要知道那个组件具备什么样的特有监听器。
        需要查看该组件对象的功能。
        通过查阅button的描述,发现按钮支持一个特有坚挺addActionListener(ActionListener l)
        */
        but.addActionListener(new ActionListener()//不需要适配器,Adapter。监听器中方法超过三个的一般都有适配器。
        {
            public void actionPerformed(ActionEvent e)
            {
                System.out.println("退出,按钮干的");
                System.exit(0);
            }
        });
    }
    public static void main(String[] args)
    {
        new FrameDemo();
    }
}

熟悉键盘事件与鼠标事件

import java.awt.*;
import java.awt.event.*;
class MouseAndKeyEvent
{
    private Frame f;
    private Button but;
    private TextField tf;
    MouseAndKeyEvent()
    {
        init();
    }
    public void init()
    {
        f = new Frame("my frame");

        f.setBounds(300,100,500,400);
        f.setLayout(new FlowLayout());
        tf = new TextField(20);//设定列数。
        but = new Button("my button");
        f.add(tf);
        f.add(but);
        myEvent();
        f.setVisible(true);
    }
    private void myEvent()
    {
        f.addWindowListener(new WindowAdapter(){

            public void windowClosing(WindowEvent e)
            {
                System.exit(0);
            }
        });
        tf.addKeyListener(new KeyAdapter()
        {
            public void keyPressed(KeyEvent e)
            {
                int code = e.getKeyCode();
                if(!(code>=KeyEvent.VK_0 && code<=KeyEvent.VK_9))
                {
                    System.out.println(code+"非法");
                    e.consume();
                }
            }
        });
        //给but添加一个键盘监听。
        but.addKeyListener(new KeyAdapter()
        {
            public void keyPressed(KeyEvent e)
            {
                //组合键
                if(e.isControlDown() && e.getKeyCode()==KeyEvent.VK_ENTER)
                    System.exit(0);
                                    //获取对应的键盘字符串。
                System.out.println(KeyEvent.getKeyText(e.getKeyCode())+"---"+e.getKeyCode());
            }

        });
        //活动监听。
        but.addActionListener(new ActionListener()//键盘能操作,空格。
        {
            public void actionPerformed(ActionEvent e)
            {
                System.out.println("action ok");
            }
        });
        /*
        //鼠标监听。
        but.addMouseListener(new MouseAdapter()
        {
            private int count = 1;
            private int count1 = 1;
            public void mouseEntered(MouseEvent e)
            {
                System.out.println("鼠标进入到该组件"+count++);
            }
            public void mouseClicked(MouseEvent e)
            {
                if (e.getClickCount()==2)
                    System.out.println("双击动作"+count1++);
            }
        });
        */
    }
    public static void main(String[] args)
    {
        new MouseAndKeyEvent();
    }
}

菜单

MenuBar,Menu,MenuItem

先创建菜单条,再创建菜单,每一个菜单 中建立菜单项。

也可以菜单添加到菜单中,作为子菜单。

通过setMenuBar()方法,将菜单添加到Frame中。

练习:完成一个简单的记事本程序。

package mymenu;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
public class MyMenuTest
{
    private Frame f;
    private MenuBar bar;
    private TextArea ta;
    private Menu fileMenu;
    private MenuItem closeItem,openItem,saveItem;
    private FileDialog openDia,saveDia;
    private File file;
    MyMenuTest()
    {
        init();
    }
    public void init()
    {
        f = new Frame("my window");
        f.setBounds(300,100,700,500);

        bar = new MenuBar();//菜单栏
        ta = new TextArea();
        fileMenu = new Menu("文件");//菜单。
        closeItem = new MenuItem("退出");//菜单项。
        openItem = new MenuItem("打开");
        saveItem = new MenuItem("保存");

        //subMenu = new Menu("子菜单");

        fileMenu.add(openItem);
        fileMenu.add(saveItem);
        fileMenu.add(closeItem);
        bar.add(fileMenu);
        f.setMenuBar(bar);
        f.add(ta);
        openDia = new FileDialog(f,"我要打开",FileDialog.LOAD);//模式默认为打开。
        saveDia = new FileDialog(f,"我要保存",FileDialog.SAVE);

        myEvent();
        f.setVisible(true);
    }
    public void myEvent()
    {
        openItem.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                openDia.setVisible(true);
                String dirPath = openDia.getDirectory();
                String fileName = openDia.getFile();

                if(dirPath ==null || fileName==null)
                    return ;
                ta.setText("");//清空
                file = new File(dirPath,fileName);
                try
                {
                    BufferedReader bufr = new BufferedReader(new FileReader(file));
                    String line = null;
                    while ((line=bufr.readLine())!=null)
                    {
                        ta.append(line+"\t\n");
                    }
                    bufr.close();
                }
                catch (IOException ex)
                {
                    throw new RuntimeException("读取失败");
                }
            }

        });
        saveItem.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                if(file==null)
                {
                    saveDia.setVisible(true);
                    String dirPath = saveDia.getDirectory();
                    String fileName = saveDia.getFile();
                    if(dirPath ==null || fileName==null)
                        return ;
                    file = new File(dirPath,fileName);
                }
                try
                {
                    BufferedWriter bufw = new BufferedWriter(new FileWriter(file));
                    String text = ta.getText();
                    bufw.write(text);
                    bufw.close();
                }
                catch (IOException ex)
                {
                    throw new RuntimeException("保存失败");
                }
            }
        });
        closeItem.addActionListener(new ActionListener()
        {
            public void  actionPerformed(ActionEvent e)
            {
                System.exit(0);
            }
        });
        f.addWindowListener(new WindowAdapter()
        {
            public void windowClosing(WindowEvent e)
            {
                System.exit(0);
            }
        });

    }
    public static void main(String[] args)
    {
        new MyMenuTest();
    }
}

黑马程序员——GUI篇

时间: 2024-10-29 03:37:45

黑马程序员——GUI篇的相关文章

黑马程序员——IO篇

------- android培训.java培训.期待与您交流! ---------- IO(Input Output)流 1.IO流用来处理设备之间的数据传输 2.Java对数据的操作是通过流的方式 3.Java用于操作流的对象都在IO包中 4.流按操作数据分为两种:字节流与字符流 . 字符流的数据字节流其实都能处理,因为无论什么在计算机上最后都是以字节存在的,但是其中有一部分数据它是以文本形式存在的,所以为了方便有了字符流,字符流里融合了编码表,而只有文字用到了编码表,所以字符流用来处理文本

黑马程序员——集合篇

------- android培训.java培训.期待与您交流! ---------- 1.集合类 为什么出现集合类? 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一 种方式. 数组和集合类同是容器,有何不同? 数组虽然也可以存储对象,但长度是固定的:集合长度是可变的.数组中可以存储基本数据类型,集合只能存储对象. 集合类的特点 集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象. 2.集合框架的构成及分类 3.

黑马程序员——正则表达式篇

------- android培训.java培训.期待与您交流! ---------- 正则表达式:符合一定规则的表达式. 作用:用于专门操作字符串. 特点:用一些特定的符合来表示一些代码操作,这样就简化书写. 所以学习正则表达式,就是在学习一些特殊符号的使用. 好处:可以简化对字符串的复杂操作. 弊端:符合定义越多,正则表达式越长,阅读性越差. 具体操作功能: 1,匹配:String matches(regex);用规则匹配整改字符串,只要有一处不符合规则,就匹配结束,返回false 2,切割

黑马程序员-GUI

GUI图形化界面Graphical user interface MenuBar通过Frame的方法setMenuBar(Menubar)添加到Frame中.Dialog和FileDialog()通过构造函数接受一个Frame. CLI command user interface java.Awt ;Abstract Window ToolKit 需要调用本地系统方法,属于重量级控件 javax.Swing 在AWT的基础上,由java实现.轻量级控件. 常见的组件的排放方式,就是布局. 常见

黑马程序员——GUI概述

------ <a href="http://www.itheima.com" target="blank">android培训</a>.<a href="http://www.itheima.comtarget="blank"> java培训</a>.期待与您交流! --------- GUI <1> Graphical User Interface(图形用户接口). <

黑马程序员—反射篇

--Java培训.Android培训.iOS培训..Net培训.期待与您交流! -- 1:获取字节码的三种方式: Employee emp=new Employee(); Class clazz1=Employee.class; Class clazz2=Class.forName("java.util.HashSet"); Class clazz3=emp.getClass(); 2:通过字节码获取对象: Employee enp=(Employee) clazz2.newInsta

黑马程序员——网络编程篇

------- android培训.java培训.期待与您交流! ---------- 概述   1.网络模型        (1).OSI参考模型        (2).TCP/IP参考模型   2.网络通讯要素         (1).IP地址        (2).端口号         (3).传输协议    3.过程        1,找到对方IP. 2,数据要发送到对方指定的应用程序上.为了标识这些应用程序,所以给这些网络应用程序都用数字进行标识. 为了方便称呼这个数据,叫做端口(逻

黑马程序员——Java基础篇之对象归要

1.static关键字 1.1.static可以修饰成员变量,成员方法,还有类(其中这里的类是内部类) 1.2.static修饰的部分会随着类的加载而加载: 加载过程:当JVM执行static修饰的代码时,会在内存的共享区给static部分开辟一个空间,供该类持有,static部分不是某个对象的部分,而是该类共有的,所以当一个函数会被多个对象调用时,最好定义成static,这样比较节省空间. 1.3.静态方法只能访问静态成员 原因:如果静态方法中调用了非静态的变量,那么由于静态方法是随着类的加载

黑马程序员——基础加强篇

------- android培训.java培训.期待与您交流! ---------- MyEclipse相关知识 Workspace与project 切换工作空间:File---Switch Workspace---Other 一个工作间包含多个工程,切换工作间之后,会影响里面的工程,例如快捷键什么的都要重新配置如果重新配了之后快捷键还没有用就要考虑下那个快捷键是不是冲突了    视图管理与程序调试 可以通过Window---Show View来添加各种透视图. 调试程序的时候可以在代码右边双