码迷,mamicode.com
首页 > 编程语言 > 详细

黑马程序员------Java中GUI(图形用户界面)学习总结

时间:2015-02-23 14:16:42      阅读:522      评论:0      收藏:0      [点我收藏+]

标签:

Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流!

GUI:

  Graphical User Interface(图形用户接口)。

  即用图形的方式,来显示计算机操作的界面,以方便用户更容易更直观地操作。

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

  java.Awt:

      Abstract Window ToolKit (抽象窗口工具包)。

      需要调用本地系统方法实现功能,属于重量级控件。

  javax.Swing:

      在AWT的基础上,建立的一套图形界面系统

      其中提供了更多的组件,而且完全由Java实现。增强了移植性,属轻量级控件。

java.awt中的继承关系:

  技术分享

  其中Container是一个特殊的组件,为一个容器,可以添加其他组件进来。

布局管理器:

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

    常见的布局管理器:

      ·FlowLayout(流式布局管理器)

        ·从做到右顺序排列

        ·Panel中的默认布局管理器

      ·BorderLayout(边界布局管理器)

        ·东,西,南,北,中

        ·Frame默认的布局管理器

      ·GridLayout(网格布局管理器)

        ·规则的矩阵

      ·CardLayout(卡片布局管理器)

        ·选项卡

      ·GridBagLayout(网格包布局管理器)

        ·非规则的矩阵

建立一个简单的窗体

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

  Window的常用子类:Frame,Dialog

创建一个简单的窗体:

/*
创建图形化界面:
1.创建frame窗体。
2.对窗体进行基本设置。
比如大小,位置,布局。
3.定义组件。
4.将组件通过窗体的add方法添加到窗体中。
5.让窗体显示。
*/
class
AwtDemo { public static void main(String[] args) { Frame f = new Frame("my awt"); f.setSize(500,400); f.setLocation(300,200); f.setLayout(new FlowLayout());

      Button b = new Button("我是一个按钮");
      f.add(b);

        f.setVisible(true);
    }
}

 

时间监听机制组成

  1、事件源(组件)

  2、事件(Event)

  3、监听器(LIistener)

  4、事件处理(引发事件后的处理方式)

事件监听机制流程图:

技术分享

 

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

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

  监听器:将可以触发某一个事件的动作(不只一个动作)都已经封装到了监听器中。以上三者,在java中都已经定义好了。直接获取其对象来用就可以了。

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

代码示例:

  //让按钮具备退出程序的功能
       /*
        按钮就是事件源。
        那么选择哪个监听器呢?
        通过关闭窗体示例了解到,想要知道哪个组件具备什么样的特有监听器。
        需要查看该组件对象的功能。
         通过查阅button的描述。发现按钮支持一个特有监听addActionListener。
      */

class FrameDemo{

 
 //定义该图形中所需的组件的引用。
    private Frame f;
    private Button but;

    FrameDemo()
    {
        init();
    }

    public void init()
    {
        f = new Frame("my frame");

        //对frame进行基本设置。
        f.setBounds(300,100,600,500);
        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);
            }
        });

        but.addActionListener(new ActionListener()
        {
            private int count = 1;
            public void actionPerformed(ActionEvent e)
            {       
                System.exit(0);
            }
        });
    }

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

 

菜单

 菜单的继承关系:

   技术分享

  菜单的创建过程:

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

  2、可以将菜单添加到菜单中,作为菜单的子菜单。

  3、通过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 openItem,saveItem,closeItem;

    private FileDialog openDia,saveDia;

    private File file;
    MyMenuTest()
    {
        init();
    }

  //窗体的初始化方法
public void init() { f = new Frame("my window"); f.setBounds(300,100,650,600); bar = new MenuBar(); ta = new TextArea(); fileMenu = new Menu("文件"); openItem = new MenuItem("打开"); saveItem = new MenuItem("保存"); closeItem = new MenuItem("退出"); fileMenu.add(openItem); fileMenu.add(saveItem); fileMenu.add(closeItem); bar.add(fileMenu); f.setMenuBar(bar); openDia = new FileDialog(f,"我要打开",FileDialog.LOAD); saveDia = new FileDialog(f,"我要保存",FileDialog.SAVE); f.add(ta); myEvent(); f.setVisible(true); }

  //事件监听处理方法
private void myEvent() {
    //保存按钮事件监听处理 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.flush(); bufw.close(); } catch (IOException ex) { throw new RuntimeException(); } } });     //打开按钮事件监听处理 openItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { openDia.setVisible(true); String dirPath = openDia.getDirectory(); String fileName = openDia.getFile(); // System.out.println(dirPath+"..."+fileName); 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+"\r\n"); } bufr.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(); } }

 

总结:

  事件监听机制:

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

    2、通过事件源对象的addxxxListener()方法将监听器注册到该事件源上。

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

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

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

    6、一般XXXListener方法超过3个或者3个就一定会有一个XXXAdapter子类对象。(也称为适配器)

 

黑马程序员------Java中GUI(图形用户界面)学习总结

标签:

原文地址:http://www.cnblogs.com/alvis2015/p/4298016.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!