图形程序设计(看了一半发现Swing现在已经不用了。。。。)
1.AWT(在不同平台上是不一致的),Swing(在不同的平台上是一致的),绝大多数Java用户界面设计都是用Swing。观感使得不同平台上的元素又有些不一样。
2.创建框架
(1)Swing中有一个JFrame类,它扩展于AWT中的Frame类。JFrame就是用来编写框架的(顶层窗口)
(2)JFrame的修饰组件(右上角三个按钮,顶部标题栏,左上角图标)是由用户的窗口系统控制,不是由Swing控制。
(3)所用的Swing组件都必须由事件分派线程(event dispatch thread),使用EventQueue.invokeLater(..)方法进行配置,如:
EventQueue.invokeLater(new Runnable(){
public void run(){
...//创建框架
}
};
(4)创建步骤:[1]创建JFrame对象 [2]使用setSize方法设置窗口大小 (该设置一般放在对象的构造函数中)[3]使用setDefaultCloseOperation(..)方法设置关闭框架时 响应动作(关闭程序等)。[4]框架起初是不可见的,需要使用setVisible方法设置可见
注:在包含多个框架的程序中,不能关闭一个框架就让程序退出,应该只是让框架隐藏起来,在所有框架都被隐藏起来时再让程序退出。
3.框架定位
(1)setLocation和setBounds用于设置窗口的位置,setIconImage用于告诉窗口系统显示哪个图标,setTitle改变标题栏的名字,setResizable设置窗口大小是否允许用户改变,setLocationByPlatform(true)由系统来决定窗口的位置。
(2)JFrame的继承层次:
JFrame -> Frame -> Window -> Container -> Component -> Object
^
|
JComponent
^
|
JPnanel
JFrame中的方法有JFrame定义的方法,也有很多方法是从其他类继承来的。Component类(所有GUI对象的祖先)和Window类(Frame类的超类)需要仔细的研究一下。
(3)创建合适的框架大小
//需要先获取屏幕的分辨率大小:
Toolkit kit = Toolkit.getDefaultToolkit();
Dimension screenSize = kit.getScreenSize();
int sizeWidth = screenSize.width;
int sizeHeight = screenSize.height;
//使用setSize方法设置框架大小,先width,后height,不要写反了
setSize(sizeWidth/2, sizeHeight/2);
4.在组件中显示信息
(1)JFrame有四层面板,其中最关心的是内容面板。Java SE1.4之前,需要先获取内容面板Container contentPane = frame.getContentPane();然后contentPane调用add方法添加组件。而现在可以直接食用frame的add方法。
(2)添加一个组件:[1]继承JComponent类,并重写paintComponent(Graphics g)方法(也可以继承JPanel类,但是在重写paintComponent方法时,需要加一句:super.paintComponent(g);用来用背景色绘制面板)
[2]在paintComponent(Graphics g)方法中绘制想要在组件中绘制的,比如g.drawString(…)
[3]重写getPreferredSize()方法,返回一个有 首选 宽度和高度的Dimension对象。告诉用户这个组件有多大。
[4]frame调用add方法,将组件添加进来。
注意:如果frame调用pack()方法来设置框架大小,那么框架的大小就会依赖于组件(如果都是标准组件)的 首选宽度和高度,以正好将组件包含进来,所以getPreferredSize()返回的Dimension对象大小一定要与组件大小差不多(可以大一些,但是不要小)。