第12章 图形用户界面基础

1、Swing和AWT的不同:

     AWT适合开发简单的图形用户界面,但不适合开发复杂的GUI项目,也容易发生于特定平台相关的故障。(重量级组件)
     SWing更稳定、更通用、更灵活,不依赖于自己GUI。(轻量级组件) SWing GUI组件类都以字母J为前缀来命名。

2、Java GUI API
     GUI API包含的类可以分为三个组:组件类(component class)、容器类(container class)、辅助类(helper class)。

     ①组件类
          Component类的实例可以显示在屏幕上,是包括容器类的所有用户界面类的根类,JComponent类是所有轻量级Swing组件类的根类,二者都是抽象类,不能使用new操作符创建实例。
     ②容器类
          一个Container的实例可以包含Component实例。
          AWT组件的容器类:Window、Panel、Applet、Frame、Dialog
          Swing组件的容器类:Container、JFrame、JDialog、JApplet、JPanel
      
     ③GUI辅助类
          辅助类都不是Component的子类,他们用来描述GUI组件的属性。
          

3、 框架   
     创建一个用户界面需要创建一个框架或一个applet来存放用户界面组件。
     ①使用JFrame类创建一个框架:
         
     直到调用frame.setVisible(true)方法后才会显示框架,调用setLocationRelativeTo(null)方法可在屏幕上居中显示框架,调用 setDefaultCloseOperation(JFrame.  EXIT_ON_CLOSE  ) 来告诉程序,当框架关闭时结束程序,否则关闭框架后程序并不会结束。
     ②向框架添加组件
          frame.add()  内容窗格授权,组件添加到框架的内容窗格中,默认布局管理器是将按钮放到中央。

4、布局管理器
     GUI组件的位置是由容器的布局管理器来管理的,布局管理器是使用布局管理类创建的。
     使用setLayout(aLayoutManager)方法设置布局管理器。

     ①FlowLayout
          最简单的布局管理器,按照组件添加的顺序,从左到右将组件排列在容器中。可以使用三个常量FlowLayout.RIGHT、FlowLayout.CENTER、FlowLayout.LEFT之一来指定组件的对齐方式。
          
         如:  setLayout( new  FlowLayout(FlowLayout.  LEFT , 10, 20)); //创建匿名的FlowLayout对象,没必要显式引用。
         推荐风格:大多GUI主类都将扩展JFrame类,这个主类的构造方法创建用户界面。main方法创建这个主类的实例,并显示这个框架。使用FlowLayout管理器在框架中放置组件,如果改变框架的大小,组件会自动地重新排列以适合框架。
            GUI组件只可以添加到一个容器中出现一次,将一个组件向容器添加多次和一次是一样的。

     ②GridLayout
          以网格矩阵的形式管理组件,组件按照添加的顺序从左到右排列。如果行数或者列数有个为零,则为零的行或列的大小由布局管理器动态决定;如果都不为零,则行数是固定的,动态地计算列数。
          
          在FlowLayout和GridLayout两个布局管理器中,组件添加到容器的顺序是很重要的,它决定了组件在容器中的位置。

     ③BorderLayout
          将容器分成五个区域:东区、南区、西区、北区和中央。同一区域添加两个组件,只会显示最后一个。
          
          BorderLayout的add方法不同,需要指定组件放置的位置,如: add( new  JButton(  "East" ), BorderLayout. EAST );

     ④布局管理器的属性
          如果需要动态地改变布局管理器的属性,必须用一个变量显式引用,然后通过该变量来改变。

5、使用面板作为子容器(JPanel)
     使用java图形用户界面进行程序设计,可以将窗口分为几个面板,面板的作用就是分组放置用户界面组件的子容器,将组件添加到一个面板,再讲面板添加到另一个面板或框架中。
     可以使用new JPanel()创建一个带默认FlowLayout管理器的面板,也可以使用new JPanel(LayoutManager)创建一个带特定布局管理器的面板。使用add(Component)方法向面板添加一个组件。
      Container类是像JButton这样的GUI组件类的父类。每个GUI组件都是一个容器,理论上讲可以使用setLayout方法设置布局,并将另个组件添加进去,因为Cantainer类中所有公共方法都已被继承。但是如果不是实际情况不得已,是不应该将它们作为容器使用的。

6、Color类
     使用java.awt.Color类为GUI组件设置颜色,RGB模式。也可选择使用为常量的13种标准颜色。
     使用public Color(int r,int g,int b);构造方法创建一个color对象,r、g和b的取值在0至255之间,如果超过这个范围,就会导致一个IllegalArguException异常。
     可以使用定义在java.awt.Component类中的setBackground(Color c)和setForeground(Color c)方法来设置一个组件的背景色和前景色。

7、Font类
     使用java.awt.Font类创建一种字体,然后使用Component类的setFont方法设置组件字体。
     Font的构造方法是:
          public Font(String name,int style,int size);
     下面语句打印系统所有可用字体的名字:
       GraphicsEnvironment  e  = GraphicsEnvironment.getLocalGraphicsEnvironment();
        String[]  fontnames  =  e .getAvailableFontFamilyNames() ;
        for ( int  i =0;i<fontnames.length;i++)
              System.out.println(fontnames[i]);

8、Swing GUI组件的公共特性
     Component类是所有GUI组件和容器的根,所有SWing GUI组件(除了JFrame、JApplet和JDialog)都是JComponent的子类。
          
     可以给JComponent类的任何对象设置边界,使用new TitleBorder(String title)创建一个带标题的边界,使用new LineBorder(Color color ,int width)创建一个线边界。
     不同组件中同样的属性会有不同的默认值,例如JFrame中的visible属性默认值为false,但在JComponent的每个实例(例如JButton和JLabel)中该属性默认值都为true。为了显示一个JFrame,必须调用setVisible(true),但不必为JButton或JLabel设置该属性,因为它已经为true。

9、图像图标
     java目前支持三种图像格式:GIF、JPEG、PNG。使用new java.swing.ImageIcon(filename)创建一个ImageIcon对象。为了使程序可以在所有平台上运行,就将所有图像文件统一使用小写命名。
     GUI组件不能被多个容器共享,因为一个GUI组件只能在一个容器中出现一次,因此组件和容器之间的关系是用实心菱形表示的组合关系。但边界和图标是可以共享的。


(注:截图来自梁勇《Java语言程序设计》中文版)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值