栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

第12章 图形用户界面程序设计入门

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

第12章 图形用户界面程序设计入门

1.Swing和AWT

  • 对Java运行的每一个平台,AWT的组件自动地通过它们各自的代理映射成特定平台(platform-specific)的组件,这些代理称为同位体(peer)。AWT适用于开发简单的图形用户界面,但不适用于开发复杂的GUI项目。AWT容易发生与平台特性相关的故障,因为它基于同位体的解决方案非常依赖底层平台。
  • 大多数Swing组件都是直接用Java代码绘制在画布上,而
    java.awt.Window或java.awt.Panel子类的组件例外,它们必须使用特定平台上本地的GUI来绘制。Swing组件更少地依赖目标机器上的平台,更少使用本地的GUI资源。
  • 不依赖本地GUI的Swing组件称为轻型组件(lightweight component),AWT组件称为重型组件(heavyweight
    component)。

2.GUI类可以分成三组:容器类(container class)、辅助类(helper class)和组件类(component class)。

  • 容器类用来包含其他组件,例如:Jframe、JPanel和JApplet等。
  • 辅助类是组件和容器用来绘制和放置对象的,例如:Graphics、Color、Font、FontMetrics和Dimension等。
  • 图形用户界面(GUI)组件类都是JComponent类的子类,例如:JButton、JTextField、Jtextarea、JComboBox、JList、JRadioButton和JMenu等。


3.Jframe、JApplet、JDialog和JComponent类及其子类都分组包含在javax. swing包中。其他类在java.awt中。

4.Swing GUI组件Component类是所有用户界面类的父类,而JComponent类是所有轻型Swing组件类的父类。由于JComponent是一个抽象类,所以,不能用new JComponent()创建JComponent的实例,但是,可以使用JComponent具体子类的构造方法来创建JComponent的实例。

5.容器类
容器类是GUI组件,用于盛装其他GUI组件的容器。Window、Panel、Applet、frame和Dialog都是AWT组件的容器类。要使用Swing组件作容器,可以使用Component、Container、Jframe、JDialog、JApplet和JPanel。

  • Container用来组织组件。框架frame、面板Panel和applet都是容器的例子。
  • Jframe是不能包含在另一个窗口内的窗口。在Java GUI应用程序中,它是包含其他Swing用户界面组件的容器。
  • JDialog是一个弹出式窗口或消息框,一般用作接收来自用户的附加信息或通知事件发生的临时窗口。
  • JApplet是Applet的一个子类。要创建基于Swing的Java applet必须扩展JApplet。
  • JPanel是一个存放用户界面组件的不可见的容器。面板可以嵌套,可以把面板放在包含面板的容器中。JPanel也可以作为画布来画图。

6.GUI辅助类
辅助类都不是Component 的子类,例如Graphics 、Color 、Font 、FontMetrics 、Dimension和LayoutManager等。它们用来描述GUI组件的属性,例如,图形环境、颜色、字体以及大小等。

  • Graphics是一个抽象类,提供一个图形环境,用于绘制字符串、直线和简单几何图形。
  • Color类用来处理GUI组件的颜色。例如,可以在Jframe、JPanel等一类组件中指定背景色或前景色,或者指定绘制的线条、几何图形和字符串的颜色。
  • Font指定GUI组件上文本和图形的字体。例如,可以指定按钮上文本的字体(比如SanSerif字体)、字型(比如粗体)和大小(比如24磅)。
  • FontMetrics是一个用于获取字体属性的抽象类。
  • Dimension将组件的宽度和高度(精度为整数)封装在单个对象中。
  • LayoutManager是一个接口,它的实例指定组件在容器中的摆放方式。
    注:辅助类包含在java.awt包中。Swing组件不能取代AWT的全部类,只能替代AWT的GUI组件类(例如Button、TextField、textarea)。AWT辅助类保持不变。

7.创建框架

java.swing.Jframe
+Jframe()创建没有标题的默认框架
+Jframe(title:String)创建具有指定标题的框架
+setSize(width:int,height:int):void指定框架的大小
+setLocation(x:int,y:int):void指定框架左上角的位置
+setVisible(visible:boolean):void设置为true以显示框架
+setDefaultCloseOperation(mode:int):void指定关闭框架时的操作
+setLocationRelativeTo(c:Component):void设置框架相对于特定组件的位置。如果组件为null,框架在屏幕上居中显示
  • 应用frame.setVisible(true)方法以前,框架不会显示。如果没有使用setSize方法,框架恰好显示标题栏。
  • 分辨率表示每平方英寸的像素数。屏幕像素越多,屏幕的分辨率越高。分辨率越高,可以看到的细节越多。
  • JDK1.5允许调用框架的add方法将组件放置到内容窗格去。这种新特性称为内容窗格委托。严格地讲,是一个组件添加到框架的内容窗格中。为简便起见,称为将组件添加到框架中。
  • 要从容器中删除组件,可以使用remove方法。

8.布局管理器
Java也支持硬编码,是依赖于平台的。
三个基本的布局管理器:FlowLayout、GridLayout和BorderLayout。

9.FlowLayout
FlowLayout是最简单的布局管理器。**按照添加的顺序,由左到右将组件排列在容器中,放满一行时,就开始新的一行。**可以使用三个常量之一来指定组件的对齐方式,这三个常量是FlowLayout.RIGHT、FlowLayout.CENTER和FlowLayout.LEFT。

  • 使用一致的风格可以使程序容易阅读。从现在开始,所有的GUI主类都要扩展Jframe类,主类的构造方法创建用户界面。main方法创建主类的实例并显示框架。
  • 如果改变框架的大小,组件会自动地重新排列以适合框架。
  • 如果使用setLayout(new FlowLayout(FlowLayout.RIGHT, 0,
    0))代替setLayout语句(第10 行),所有的按钮行都将右对齐并且没有间距。
//下述语句(第10行)创建了一个匿名的FlowLayout对象:
setLayout(n e w FlowLayout(FlowLayout.LEFT, 1 0, 2 0));
//它等价于语句:
FlowLayout layout= new FlowLayout(FlowLayout.LEFT,1 0,2 0);
setLayout(layout);
  • setTitle方法(第24行)定义在java.awt.frame类中。可以使用该方法给Jframe的对象设置标题。
  • 在容器中多次添加同一个按钮,只会显示最后一个。
  • 构造方法ShowFlowLayout()没有明确地调用构造方法Jframe(),但是隐含地调用了构造方法Jframe()。

10.GridLayout
根据构造方法定义的行数和列数,布局管理器GridLayout以网格(矩阵)的形式排列组件。组件按照添加的顺序从左到右排列,从第一行开始,接着是第二行,如此下去。

可以指定网格的行数和列数。基本规则如下:

  • 行数或列数可以为零,但不能两个全为零。如果一个为零另一个不为零,那么,为零的维数由布局管理器动态地决定时,不为零的维数已经固定。例如,如果指定网格的行数为0列数为3,并且有10个组件,GridLayout创建3个固定的列和4个行,最后1行只包含1个组件。如果指定网格的行数为3列数为0,并且有10个组件,则GridLayout创建3个固定的行和4个列,最后1行包含2个组件。
  • 如果行数和列数都不为零,那么行数是主要参数。也就是说,行数是固定的,布局管理器动态地计算列数。例如,如果指定一个3行3列有10个组件的网格,GridLayout创建3个固定的行和4个列,最后1行包含2个组件。
    如果改变框架的大小,按钮的布局仍保持不变(也就是说,行数和列数不变,间距也不变)。

在使用GridLayout的容器中,所有组件的大小都一样。
在FlowLayout和GridLayout两个布局管理器中,组件添加到容器的顺序是很重要的,它决定了组件在容器中的位置。

11.BorderLayout
BorderLayout 管理器将窗口分成五个区域:东区、南区、西区、北区和中央。使用add(Component, index)方法可以将组件添加到BorderLayout中,其中index是一个常量,取值为BorderLayout.EAST、BorderLayout.SOUTH、BorderLayout.WEST、BorderLayout.NORTH或BorderLayout.CENTER。

组件根据它们最合适的尺寸和在容器中的位置来放置。南、北组件可以水平扩展,东、西组件能够垂直拉伸,中央组件既可以水平也可以竖直扩展以填满空白空间。

12.布局管理器的属性可以动态地改变。FlowLayout具有属性alignment、hgap和vgap,可以使用setAlignment、setHgap和setVgap方法来指定对齐方式、水平间距和垂直间距。GridLayout具有属性rows、columns、hgap和vgap,可以使用setRows、setColumns、setHgap和setVgap方法来指定行数、列数、水平间距和垂直间距。BorderLayout具有属性hgap和vgap,可以使用setHgap和setVgap方法来指定水平间距和垂直间距。

13.每一时刻,一个容器只能有一个布局管理器。可以使用setLayout(aNewLayout)方法改变容器的布局管理器,然后使用validate()方法强迫容器根据新的布局管理器重新摆放其中的组件。
如果使用相同的布局管理器但是改变了它的属性,需要使用doLayout()方法强迫容器根据布局管理器的新属性对组件重新放置。

14.Color类
可以使用java.awt.Color类为GUI组件设置颜色。颜色是由红、绿、蓝三原色构成,每种原色的强度都用一个无符号的byte值表示,从0(最暗)到255(最亮)。这就是通常所说的RGB模式(RGB model)。

//可以使用下述构造方法创建color对象:
public Color(int r, int g, int b);
  • 参 数 r、 g和 b 取值在 0到255之间。如果传递给参数的值超过这个范围,会抛出IllegalArgumentException异常。
  • 可以使用定义在java.awt.Component类中的setBackground(Color c)和setForeground
    (Color c)方法来设置组件的背景色和前景色。
  • java.awt.Color中将13种标准颜色(black、blue、cyan、darkGray、gray、green、lightGray、magenta、orange、pink、red、white和yellow)定义为常量,可以选用它们。
  • 从JDK1.4开始,也可以使用新常量BLACK、BLUE、CYAN、DARK_GRAY、GRAY、GREEN、LIGHT_GRAY、MAGENTA、ORANGE、PINK、RED、WHITE和YELLOW。

15.Font类
可以使用java.awt.Font类创建字体对象,并使用Component类中的SetFont方法设置组件的字体。

//Font的构造方法是:
public Font(String name, int style, int size);

16.使用面板作子容器
使用Java用户图形界面程序设计,可以将窗口分成几个面板,面板是分组放置用户界面组件的子容器。可以将按钮添加到一个面板中,然后把面板添加到框架中。
面板的Swing版本是JPanel。可以使用new JPanel()创建一个带默认FlowLayout管理器的面板,也可以使用new JPanel(LayoutManager)创建一个带指定布局管理器的面板。使用add(Component)方法可以给面板添加一个组件。

//例如,下述代码创建一个面板并给它添加一个按钮:
JPanel p = new JPanel();
p.add(new JButton("O K"));
//面板可以放置到框架中或另一个面板中。下列语句将面板p放到框架f中:
f.add(p);

17.Swing GUI组件的一般特性
Component类是所有GUI组件和容器的根。(不是辅助类的根)
所有Swing GUI组件(除了Jframe、JApplet和JDialog)都是JComponent的子类。
在不同的组件中同样的属性会有不同的默认值。

18.图像图标
Java使用javax.swing.ImageIcon类表示图标。图标是大小固定的图片;通常情况下都比较小而且用来装饰组件。图像通常存储在图像文件中。可以使用new ImageIcon(filename)创建一个图像图标。
Java当前支持三种图像格式:GIF、JPEG以及PNG。
GUI组件不能被多个容器共享因为一个GUI组件只能一次在一个容器中出现。
**边界和图标是可以共享的。**因此,可以创建一个边界或图标,用它来设置任意GUI组件的border或icon属性。

19.补充:
使用add方法将组件放到Jframe和JPanel。默认情况下,框架的布局是BorderLayout,JPanel的布局是FlowLayout。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/361621.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号