CUI 设计

GUI(图形化界面编程)
  Graphical  User  Interface
  (java.Awt    javax.Swing)

CLI(命令行操作接口)
  Command  line  User  Interface

现在讲解GUI:

  java.Awt: Abstract Windows ToolKit:主要是调用本地系统方法实现(依赖于操作系统),重量级组件。
  javax.Swing: 在Awt的基础上,建立了一套图形界面系统,其中提供了大量组件,完全由java实现,增强了移植性,轻量级组件

我们主要使用 javax.Swing.

  框架的继承关系:

    Object
      |---Component :    组件
        |---Button :     按钮(可添加文字标签)
        |---Label :      标签(封装文字)
        |---Checkbox :   复选框、检查盒
        |---TextComponent :文本组件
          |---TextArea :   文本域(一个多行的文本框)
          |---TextField :   文本框(一个单行的文本框)

        |---Container :     为容器(是一个特殊的组件,可以通过add方法添加别的组件进来。)
          |---Window :    窗口 (在Container上添加了更多功能)
            |---Dialog :   对话框(绑定与其他容器,一般做提醒功能,参数为true锁定后面的窗口)
              |---FileDialog :文本对话框(打开或者保存文件的对话框,靠参数区别功能)
            |---Frame :     框架 (整个框架的主要载体、容器)
          |---Panel :     仪表板

      |---MenuComponent : 菜单组件
        |---MenuBar :菜单栏

        |---MenuItem :菜单条目
          |---Menu :菜单
            |---PopupMenu :动态菜单

布局: 容器中的排列方式

  常见的布局管理器:

    1、FlowLayout(流式布局管理器)。
            从左到右的顺序排列。
            panel默认的布局管理器。
    2、BorderLayout(边界布局管理器)。
            东,南,西,北,中。
            Frame默认的布局管理器。
    3、GridLayout(网格布局管理器)。
            规则矩阵排列。
    4、GridBagLayout(网格包布局管理器)。
            不规则矩阵排列。
    5、CardLayout(卡片式布局管理器)。
            选项卡排雷。

一、界面布局设置

    方法学习: 该包中的方法太多,大部分方法要自己在开发时查阅文档。

    但是Container(窗体)重点掌握。

      Conponent:
        构造方法:看其子类。

        调整组件是否显示: void setVisible(boolean b) 根据参数 b 的值显示或隐藏此组件(参照Frame中最初不可见的构造方法)。

        调整组件大小: void setSize(Dimension d) 调整组件的大小,使其宽度为 d.width,高度为 d.height。

                void setSize(int width, int height) 调整组件的大小,使其宽度为 width,高度为 height。

        调整组件位置: void setLocation(int x, int y) 将组件移到新位置(左上角据窗口的左上角)。

                void setLocation(Point p) 将组件移到新位置(Point为一个坐标对象,其他同上)。

        调整组件位置和大小: void setBounds(int x, int y, int width, int height) 移动组件并调整其大小。

      Container:

        构造方法:看其子类。

        布局设置:
              void setLayout(LayoutManager mgr) 设置此容器的布局管理器。

      Frame:(默认边界布局)

        构造方法:
            Frame() 构造一个最初不可见的 Frame 新实例()。

            Frame(GraphicsConfiguration gc) 使用指定的 GraphicsConfiguration 构造一个最初不可见的新 Frame。

            Frame(String title) 构造一个新的、最初不可见的、具有指定标题的 Frame 对象。

            Frame(String title, GraphicsConfiguration gc) 构造一个新的、初始不可见的、
                            具有指定标题和 GraphicsConfiguration 的 Frame 对象。

    创建图形化界面方法及示例:

      1、创建frame窗体。
      2、对窗体进行基本设置
        如:大小、位置、布局方式、颜色等。。
      3、定义组件。
      4、将组件通过add方法添加到窗体中。
      5、让窗体可以显示,通过 setVisible(true)方法。
      如:
        import java.Awt.*;
        class AwtDemo
        {
          public static void main(String []args)
          {
            Frame f = new Frame("my awt");
            f.setSise(400,500);
            f.setLocation(300,400);
            f.setLayout(new Flowlayout());

            Butten b = new Butten("I\‘m a Butten");
            f.add(b);
            f.setVisible(true);
          }
        }

二、事件监听机制(事件在界面创建之后,事件和界面应该分开创建)event

    就是监听组件是否发生动作 (按钮是否被按等),一定发生,判断动作,调用功能做出反应。
      1、事件源(组件)
      2、事件(Event)     (每个事件源都有特有事件和共有事件)
      3、监听器(Listener)   (将可以触发某一个事件的动作(不止一个)都已经封装到监听器中)Adapter(适配器)
      4、事件处理(事件引发后的处理方式)(我们可以处理的)

    方法:   1、明确事件源:各种的组件(包括容器)
          2、通过组件对象调用监视器绑定方法绑定监视器,一个事件源可以发生多种事件,也就可以绑定多种的事件监视器。
          该方法使用对应监视器对象为参数此处常用匿名内部类,
        3、监视器中封装的是对事件的处理方法,这些方法要传入事件对象为参数(形参定义方式),
          而我们要复写这些对事件的处理方法,达到操作事件的的目的。

三、各种事件学习。

    活动事件:
      绑定活动事件监听器:f.addActionListener(new ActionListener()
                {
                  public void actionPerformed(ActionEvent e) {
                    //处理语句
                  }
                });

      绑定键盘事件监听器:bt.addKeyListener(new KeyAdapter()
                {
                  public void keyPressed(KeyEvent e){
                    //处理语句
                  }
                });
      其他事件的监听处理类似。

四、netbeans

      一个用于处理图形界面编译的IDE,可以使用画布功能直接涉及框架的大小及布局,之后自动生成代码,在此基础上
      添加监听等其他代码(简单的监听事件已经在设计步骤处理完毕)。

五、ToolKit

    此类是所有 Abstract Window Toolkit 实际实现的抽象超类。Toolkit 的子类被用于将各种组件绑定到特定本机工具包实现。

    

static Toolkit getDefaultToolkit() 
          获取默认工具包。
时间: 2024-10-25 09:53:36

CUI 设计的相关文章

Linux/Unix设计思想

Mike Gancarz 1.Unix开发基于Multics分时操作系统 2.NIH(Not invented here,非我发明) 3.GPL:GUN公共授权协议,适用于软件的法律协议.开源 4.Unix哲学: 1)小即是美:易理解.维护.低消耗系统资源.易于其他工具结合 2)让每一个程序制作好一件事 3)尽快建立原型(prototyping):"第三个系统"概念 4)舍高效而取可移植性 5)使用纯文本文件来存储数据:二进制严格禁止 6)充分利用软件的杠杆效应:借用代码模块;将一切自

静态网页框架设计首次体验(文章改)

根据教材与上网成功解决了Tomcat与Myeclipse的安装,同时熟悉了Java web创建项目到部署运行整个过程.今天起正式开始学习有关Java web的编程部分.Java web静态网页(HTML网页)的标记含义.基本语法的介绍到框架设计基本模板与案例,今天的学习的内容,让网页编程有了一个初步的框架.结合自身所在协会的情况,计划制作一个关于协会的网页,已有初步想法,望通过学习不断完善和修改协会网站.根据今天所学,并参考书本30页框架设计案例对网页进行初步搭建. 具体代码如下 TW.jsp:

PYQT设计无边框窗体

#UI.py,通过UI设计师制作后直接转换为UI.py脚本 # -*- coding: utf-8 -*-from PyQt4 import QtCore, QtGui try:    _fromUtf8 = QtCore.QString.fromUtf8except AttributeError:    _fromUtf8 = lambda s: s class Ui_Form(object):    def setupUi(self, Form):        Form.setObject

Java精品高级课,架构课,java8新特性,P2P金融项目,程序设计,功能设计,数据库设计,第三方支付,web安全,视频教程

36套精品Java架构师,高并发,高性能,高可用,分布式,集群,电商,缓存,性能调优,设计模式,项目实战,P2P金融项目,大型分布式电商实战视频教程 视频课程包含: 高级Java架构师包含:Spring boot.Spring  cloud.Dubbo.Elasticsearch,Redis.ActiveMQ.Nginx.Mycat.Spring.MongoDB.ZeroMQ.Git.Nosql.Jvm.Mecached.Netty.Nio.Mina.java8新特性,P2P金融项目,程序设计,

Android 设计一个菱形形状的Imageview组件.

网上没有资料,特来请教下大神 Android 设计一个菱形形状的Imageview组件. >> android 这个答案描述的挺清楚的:http://www.goodpm.net/postreply/android/1010000007107851/Android设计一个菱形形状的Imageview组件.html

微信红包的架构设计简介

@来源于QCon某高可用架构群整理,整理朱玉华. 背景:有某个朋友在朋友圈咨询微信红包的架构,于是乎有了下面的文字(有误请提出,谢谢) 概况:2014年微信红包使用数据库硬抗整个流量,2015年使用cache抗流量. 微信的金额什么时候算? 答:微信金额是拆的时候实时算出来,不是预先分配的,采用的是纯内存计算,不需要预算空间存储.. 采取实时计算金额的考虑:预算需要占存储,实时效率很高,预算才效率低. 实时性:为什么明明抢到红包,点开后发现没有? 答:2014年的红包一点开就知道金额,分两次操作

微信小程序的Web API接口设计及常见接口实现

微信小程序给我们提供了一个很好的开发平台,可以用于展现各种数据和实现丰富的功能,通过小程序的请求Web API 平台获取JSON数据后,可以在小程序界面上进行数据的动态展示.在数据的关键 一环中,我们设计和编写Web API平台是非常重要的,通过这个我们可以实现数据的集中控制和管理,本篇随笔介绍基于Asp.NET MVC的Web API接口层的设计和常见接口代码的展示,以便展示我们常规Web API接口层的接口代码设计.参数的处理等内容. 1.Web API整体性的架构设计 我们整体性的架构设计

微信公众平台应用开发框架sophia设计不足

设计一个小框架考虑的东西真不少,每一样都不容易: 1.既要解决当前技术的不足: 2.又要方便他人使用(主要的目的): 3.同时又要设计得优雅,容易扩展: sophia一开始设计用来支持智能回复(文本可以带参数的回复),后来又支持菜单,并统一了菜单和文本命令的处理逻辑, 再后来看到微信客户端的交互元素太少,又支持html页面操作和微信客户端的会话(即页面操作可以知道是哪个微信号操作的) 对于如何维系两个不同类型消息(命令)之间的关系?对sophia来说有点吃力.即,前面是一个文本(命令),后面是一

设计一个程序能够将某一个目录下面的所有文件名打印出来---File类的使用

,设计一个程序能够将某一个目录下面的所有文件名打印出来 运用到的方法有:返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录:list()           测试此抽象路径名表示的文件是否是一个目录:isDirectory()           返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件:listFiles() package printfilename; import java.io.File; public class PrintFileNam