《Java核心技术 卷I》第10章 图形用户界面程序设计
图形用户界面(GUI)
Java1.0的时候,GUI类库,抽象窗口工具箱(Abstract Window Toolkit,AWT)。
Swing用户界面库,是Java基础类库(Java Foundation Class,JFC)的一部分。
注释:Swing没有完全替代AWT,而是基于AWT架构之上,Swing编写的程序还需要基本的AWT处理事件。
Swing是指被绘制的用户界面类,AWT是指像事件处理这样的窗口工具箱的底层机制。
挺像H5+CSS3和JS的关系。
选择Swing的原因:
- Swing拥有一个丰富、便捷的用户界面元素集合。
- Swing对底层平台依赖的很少,因此与平台相关的bug很少。
- Swing给予不同平台用户一致的感觉。
Metal观感,SE5以后,默认主题Ocean,JavaSE6以后支持色彩主题个性化,逼真表现动态按钮和变得十分时尚的滚动条。
有趣观感参考:www.javootoo.com,已无法访问。
Synth观感,提供图像文件和XML描述文件来定义新的观感。
Napkin观感,为所有用户界面元素提供一种手绘外观。http://napkinlaf.sourceforge.net
绝大多数Java用户界面程序设计都采用Swing,但有一个特别的例外,Eclipse中SWT图形工具箱。
Oracle开发JavaFX替代Swing,对标Flash竞争。
创建框架
顶层窗口(就是没有包含在其他窗口中的窗口)被称为窗体(frame)。
JFrame拓展于Frame类,不绘制在画布上,而是由用户窗口绘制。
创建窗体
示例:在屏幕中显示一个空框架的简单程序
simpleframe/SimpleFrameTest.java
package simpleframe;
import java.awt.EventQueue;
import javax.swing.JFrame;
public class SimpleFrameTest {
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
SimpleFrame frame = new SimpleFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}
}
class SimpleFrame extends JFrame {
private static final int DEFAULT_WIDTH = 300;
private static final int DEFAULT_HEIGHT = 200;
public SimpleFrame() {
super.setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
}
}
Swing类位于javax.swing包中。
窗体属性
JFrame类本身只包含若干个改变窗体外观的方法。
- setLocation方法和setBounds方法用于设置窗体的位置
- setIconImage方法用于告诉窗口系统在标题栏、任务切换窗口等位置显示哪个图标。
- setTitle方法用于改变标题栏的文字。
- setResizable利用一个boolean值确定是否允许用户改变窗体的大小。
AWT和Swing中窗体以及组件类的继承层次
java.awt.Component 1.0
- boolean isVisible()
- void setVisible(boolean b),获取或设置visible属性,组件最初是可见的,但类似JFrame的顶层组件例外。
- void setSize(int width,int height) 1.1,将组件大小调整为给定的宽度和高度。
- void setLocation(int x,int y) 1.1,将组件移到一个新的位置,如果组件不是顶层组件,x和y坐标是容器坐标;否则如果组件是顶层组件(例如:JFrame),x和y坐标就使用屏幕坐标。
- void setBounds(int x,int y,int width,int height) 1.1,移动并调整组件大小。
- Dimension getSize() 1.1
- void setSize(Dimension d) 1.1,获取或设置当前组件的size属性。
java.awt.Window 1.0
- void setLoactionByPlatform(boolean b) 5,获取或设置locationByPlatform属性,这个属性在窗口显示之前设置时,由平台选择一个合适的位置。
java.awt.Frame 1.0
- boolean isResizable()
- void setResizable(boolean b),获取或设置resizable属性,设置了这个属性时,属性值为true,用户可以调整窗体大小。
- String getTitle()
- void setTitle(String s),获取或设置title属性,这个属性确定窗口标题栏中的文字。
- Image getIconImage()
- void setIconImage(Image image),获取或设置iconImage属性,这个属性确定窗体的图标,窗口系统可能会将这个图标显示为窗体装饰的一部分或者显示在其他位置。
java.awt.Toolkit 1.0
- static Toolkit getDefaultToolkit(),返回默认的工具箱。
- Dimension getScreenSize(),返回用户屏幕大小。
java.swing.ImageIcon 1.2
- ImageIcon(String filename),构造一个图标,其图像存储在一个文件中。
- Image getImage(),获得该图标的图像。