第7章 图形用户界面
7.1 绘图
- 图形环境和图形对象:
GUI组件左上角坐标默认为(0,0),从左上角到右下角坐标增加,坐标的单位是像素;
Graphics对象,抽象类,专门管理图形环境,提供了一个与平台无关的绘图接口;
各平台上实现的Java系统将创建Graphics类的一个子类来实现绘图功能,但是这个子类对程序员是透明的;
执行paint方法时,系统会传递一个指向特定平台的Graphics子类的图形对象g; - 颜色设置:Color类及Graphics类中相关方法;
字体设置:Font类及Graphics类中相关方法; - Graphics类:绘制字符串或各种图形;
主窗口:继承JFrame;
主程序:GraphicsTester application = new GraphicsTester();
application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); - Java2D API提供了高级的二维绘图功能,分布在java.awt、java.awt.image等多个包中,能够绘制各种形状、控制笔画、填充形状、变换图形、构建重叠文本和图形、剪切形状等;
Graphics2D类,Graphics的抽象子类,使用Java2D API必须建立该类对象; - 传递给paint方法的对象是Graphics2D的一个子类实例,被向上转型为Graphics类的实例,要访问Graphics2D功能,必须将传递给paint方法的Graphics引用强制转换为Graphics2D引用:Graphics2D g2d = (Graphics2D)g;
7.2 Swing基础
- JFC(Java Foundation Classes),关于GUI组件和服务的完整集合,作为Java Se的一个有机部分,主要包含AWT、Java2D、Accessibility、Drag&Drop、Swing共5个部分;
Swing:JFC的一部分,提供按钮、窗口、表格等所有组件,纯Java组件;
Swing出现之前:AWT包,大多重量级组件,含有本地代码;
Swing组件名称是在原来AWT组件名称前加上J,如JButton、JCheckBox、JScrollbar等,是JComponent类的子类;
架构在AWT之上,是AWT的扩展而不是取代;
完全由Java语言编写,外观和功能不依赖于任何由宿主平台的窗口系统提供的代码,是轻量级组件;
可以提供更丰富的视觉感受; - 在Applet和Application中应用Swing:
在Applet中应用Swing,要将Swing组件加载到Applet容器上(通常是JApplet),通常在init方法中完成;
在Application中应用Swing,要将Swing组件加载到这个Application的顶层容器(通常是JFrame中);
7.3 Swing的层次
- 多数Swing组件的继承层次:
java.lang.Object -> java.awt.Component -> java.awt.Container -> javax.swing.JComponent
JComponent类是除了顶层容器以外所有Swing组件的超类; - Component类:
包含paint、repaint方法,可以在屏幕上绘制组件;
大多数GUI组件直接或间接扩展Component; - Container类:
容器类,容纳相关组件;
包括add方法,用来添加组件;
包括setLayout方法,用来设置布局,帮助Container对象对组件定位和设置大小; - JComponent类(多数Swing组件的超类)
可定制的观感,即可根据需求定制观感;
快捷键(通过键盘直接访问GUI组件);
一般的事件处理功能; - Swing的组件和容器层次:
顶层容器JFrame(单个主窗口),JDialog(二级窗口(对话框)),JApplet(在浏览器窗口中实现一个applet显示区域),都是重量级组件(必须和操作系统打交道),分别从原来AWT组件的Frame、Dialog和Applet类继承而来,每个使用Swing组件的Java程序必须至少有一个顶层容器放置其他组件;
中间层容器:一般用途的(JPanel、JScrollPane、JSplitPane、JTabbedPane、JToolBar),特殊用途的(JInternalFrame、JRootPane);
原子组件:直接与用户交互的组件,显示不可编辑信息的(