第12章 图形用户界面基础

12.3 Java GUI API

GUI API包含的类可以分成三个组:组建类(component class)、容器类(container class)和辅助类(helper class)。

组建类是用来创建用户界面的,例如,JButton、JLabel和JTextField。容器类是用来包含其他组件的,例如,JFrame、JPanel和JApplet。辅助类是用来支持GUI组件的,例如,Graphics、Color、Font、FontMetrics和Dimension。

注意 JFrame、JApplet、JDialog和JComponent类及其子类一起放置在javax.swing包中。

12.3.1 组件类

Component类的实例可以显示在屏幕上。Component类是包括容器类的所有用户界面类的根类,而JComponent类是所有轻量级Swing组建类的根类。Component和JComponent都是抽象类。当目前为止,只需要知道抽象类除了不能使用new操作符创建它的实例之外,其他地方和其他类是一样的。例如,不能使用new JComponent()创建一个JComponent的实例。但是,可以使用JComponent的具体子类的构造方法来创建JComponent的实例。熟悉这些类的继承层次结构是非常必要的。

12.3.2 容器类

一个Container的实例可以包含Component实例。容器类是用于盛装其他GUI组件的GUI组件。Window、Panel、Applet、Frame和Dialog都是AWT组件的容器类。要使用Swing组件作容器,可以使用下所述的Container、JFrame、JDialog、JApplet和JPanel。

GUI容器类
容器类说明
java.awt.Container用于对组件分组。框架Frame、面板Panel和applet都是它的子类
javax.swing.JFrame一个不能包含在另一个窗口中的窗口。在Java GUI应用程序中,它用于存放其他Swing用户界面组件
java.swing.JPanel一个存放用户界面组件的不可见的容器。面板可以嵌套。可以将面板放在包含面板的容器中。JPanel也可用作画图的画布
java.swing.JAppletApplet的一个子类。必须扩展JApplet才能创建基于Swing的Java applet
java.swing.JDialog一个弹出式窗口或消息框,一般用作接收来自用户的附加信息或通知事件发生的临时窗口

12.3.3 GUI辅助类

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

GUI辅助类
辅助类说明
java.awt.Graphics一个抽象类,提供绘制字符串、线和简单几何图形的方法
java.awt.Color处理GUI组件的颜色。例如,可以在像JFrame和JPanel这样的组件中指定背景色或前景色,或者指定绘制的线条、几何图形和字符串的颜色
java.awt.Font指定GUI组件上文本和图形的字体。例如,可以指定按钮上文本的字型(例如,SansSerif)、风格(例如,粗体)以及大小(例如,24号)
java.awt.FontMetrics一个获取字体属性的抽象类
java.awt.Dimension将组件的宽度和高度(以整数为精度)封装在单个对象中
java.awt.LayoutManager指定组件在容器中如何放置
注意 辅助类是在包java.awt中的。Swing组件不能取代AWT中的全部类,只能替代AWT GUI的组件类(例如,Button、TextField、TextArea)。AWT辅助类在GUI程序设计中仍然很有用。
12.4 框架

创建一个用户界面需要创建一个框架或一个applet来存放用户界面组件。

12.4.1 创建一个框架

使用JFrame类创建一个框架

import javax.swing.JFrame;

public class MyFrame{
    public static void main(String[] args){
        JFrame frame = new JFrame("MyFrame");  //Create a frame
        frame.setSize(400, 300);  //Set the frame size
        frame.setLocationRelativeTo(null);  // Center a frame
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);  //Display the frame
    }
}
javax.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设置和特定组件相关的框架的位置。如果该组件为空,那么框架在屏幕中居中
+pack():void自动设置框架大小以在框架中放置组件

12.4.2 向框架中添加组件

框架是空的。可以使用add方法在框架中添加组件。

12.5 布局管理器

Java的GUI组件都放置在容器中,它们的位置是由容器的布局管理器来管理的。在前面的程序中,并没有指定将OK按钮放置在框架中的什么位置,但是,Java知道应该把它放在哪里,因为在后台工作的布局管理器能够将组件放到正确的位置。布局管理器是使用布局管理器类创建的

使用setLayout(aLayoutManager)方法在容器中设置布局管理器。例如,可以使用下面的语句创建一个XLayout的实例,并将它置于一个容器内:

LayoutManager layoutManager = new XLayout();
container.setLayout(layoutManager);
12.5.1 FlowLayout

FlowLayout是最简单的布局管理器。按照组件添加的顺序,从左到右地将组件排列在容器中。当放满一行时,就开始新的一行。可以使用三个常量FlowLayout.RIGHT、FlowLayoutCENTER和FlowLayoutLEFT之一来指定组件的对齐方式。还可以指定组件之间以像素为单位的间隔。

12.5.2 GridLayout

GridLayout管理器以网络(矩阵)的形式管理组件。组件按照它们添加的顺序从左到右排列,先是第一行,接着是第二行,以此类推。

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

1)行数或列数可以为零,但不能两者都为零。如果一个为零另一个不为零,那么不为零的行或列的大小已经固定,而为零的行或列的大小由布局管理器动态地决定。例如,如果指定一个网络有0行3列10个组件,GridLayout就会创建3个固定的列和4个行,最后1行只包含1个组件。如果指定一个网络有3行0列10个组件,GridLayout就会创建3个固定的行和4个列,最后1行包含2个组件。

2)如果行数和列数都不为零,那么行数就是主导参数;也就是说,行数是固定的,布局管理器会动态地计算列数。例如,如果指定一个网络有3行3列10个组件,GridLayout就会创建3个固定的行和4个列,最后1行包含2个组件。
12.5.3 BorderLayout

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

12.6 使用面板作为子容器

假设要在框架中放置十个按钮和一个文本域。按钮以网络形式放置,文本域单独占一行。如果将所有这些组件放在一个单独的容器中,是很难达到要求的视觉效果的。使用Java图形用户界面进行程序设计,可以将一个窗口分成几个面板。面板的作用就是分组放置用户界面组件的子容器。可以将这些按钮添加到一个面板中,然后再将这个面板添加到框架中。

面板Swing版本是JPanel。可以使用new JPanel()创建一个带默认FlowLayout管理器的面板,也可以使用new JPanel(LayoutManager)创建一个带特定布局管理器的面板。使用add(Component)方法可以向面板添加一个组件。

12.7 Color类

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

可以使用下面的构造方法创建一个color对象:

public Color(int r, int g, int b);
其中r、g和b指定某个颜色的红、绿、蓝成分。例如,

Color color = new Color(128, 100, 100);
注意 参数r、g和b的取值都在0到255之间。如果传递给参数的值超过这个范围,就会导致一个IllegalArgumentException异常。

还可以选择使用java.awt.Color中定义为常量的13种标准颜色(BLACK黑色、BLUE蓝色、CYAN青色、DARK_GRAY深灰、GRAY灰色、GREEN绿色、LIGHT_GRAY淡灰、MAGENTA洋红、ORANGE橘色、PINK粉红、RED大红、WHITE白色和YELLOW黄色)之一。例如,下面的代码可以将按钮的前景色设置成红色:

jbtOK.setForeground(Color.RED);
12.8 Font类

可以使用java.awt.Font类创建一种字体,然后使用Component类中的SetFont方法设置组件的字体。

Font的构造方法是:

public Font(String name, int style, int size);
可以从SansSerif、Serif、Monospaced、Dialog或DialogInput中选择一种字体名,可以从Font.PLAIN(0)、Font.BOLD(1)、Font.ITALIC(2)和Font.BOLD + Font.ITALIC(3)中选择风格,然后指定正整数的字体大小。例如,下面的语句创建两种字体,并且给按钮设置一种字体:

Font font1 = new Font("SansSerif", Font.BOLD, 16);
Font font2 = new Font("Serif", Font.BOLD + Font.ITALIC, 12);
JButton jbtOK = new JButton("OK");
jbtOK.setFont(font1);
12.10 图像图标

为了显示一个图像图标,首先使用new java.swing.ImageIcon(filename)创建一个ImageIcon对象。例如,下面的语句使用当前类路径下的image目录的图像文件us.gif来创建一个图标:

ImageIcon icon = new ImageIcon("image/us.gif");
使用new JLabel(imageIcon)或new JButton(imageIcon)在标签或按钮上显示图像图标。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值