Swing概述
- AWT-Abstract Window Toolkit,抽象窗口工具箱
- Swing没有完全替代AWT,而是基于AWT架构之上。Swing仅仅提供了能力更加强大的用户界面组件。
- 选择Swing的原因:1.拥有一个丰富、便捷的用户界面元素集合2.对底层平台依赖的很少,因此与平台相关的bug很少3.给与不同平台用户一致的感觉
- 观感实现www.javootoo.com
- Napkin观感http://napkinlaf.sourceforge.net
- JavaFX:http://docs.oracle.com/javase/8/javafx/get-started-tutorial/jfx-overview.htm
- SWT:www.eclipse.org/articles/
创建框架
- 框架frame:顶层窗口(就是没有包含在其他窗口中的窗口),这个类的Swing版本名为JFrame,它扩展与AWT的Frame类
显示一个空框架的简单程序:
import java.awt.*;
import javax.swing.*;
public class SimpleFrameTest{
public static void main(String[] args){
EventQueue.invokeLater(() ->
SimpleFrame f = new SimpleFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
);
}
}
class SimpleFrame extends JFrame{
private static final int DEFAULT_WIDTH = 300;
private static final int DEFAULT_HEIGHT = 300;
public SimpleFrame(){
setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
}
}
- javax表示这是一个Java扩展包,而不是核心包。默认情况下,框架的大小为0x0像素。这里定义了一个子类SimpleFrame,它的构造器将框架的大小改变了一下。
- 每个Swing程序中,有两个技术问题需要强调:
- 首先,所有的Swing组件必须由事件分派线程(event dispatch thread)进行配置,线程将鼠标点击和按键控制转移到用户接口组件;EventQueue.invokeLater(()-> {statements});
- 定义一个用户关闭这个框架时的响应动作。选择这个响应动作的语句是 f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- f.setVisible(true):框架起初是不可见的,可以在框架第一次显示之前往其中添加组件。为了显示框架,才使用了这条语句。
- 在初始化语句结束后,main方法退出。并没有终止程序,终止的只是主线程。事件分派线程保持程序处于激活状态,直到关闭框架或调用System.exit方法终止程序。
- 可以调用f.setUndecorated(true)关闭所有框架装饰
框架定位
- setLocation和setBounds方法用于设置框架的位置
- setIconImage用于告诉窗口系统在标题栏、任务切换窗口等位置显示哪个图标
- setTitle用于改变标题栏的文字
- setResizable利用一个boolean值确定框架的大小是否允许用户改变
- AWT和Swing中框架和组件类的继承层次:http://www.360doc.com/content/17/0302/00/40747878_633218456.shtml
- Component类是所有GUI对象的祖先,Window类是Frame类的超类
- 可以让窗口系统控制窗口的位置,如果在显示窗口之前调用setLocationByPlatform(true),窗口系统会选用窗口的的位置,而不是大小,通常是距最后一个显示窗口很少偏移量的位置。
- 对于框架来说,setLocation和setBounds中的坐标均相对于整个屏幕,在容器中包含的组件所指的坐标均相对于容器。
- 组件类的很多方法是以get/set方法对形式出现的,如public String getTitle();public void setTitle(String title);
- 对于类型为boolean类型的属性,获取方法由is开头。
- 得到屏幕的大小:调用Toolkit类的静态方法getDefaultToolkit得到一个Toolkit对象。然后,调用getScreenSize方法,这个方法以Dimension对象的形式返回屏幕的大小。Dimension对象同时用公有实例变量width和height保存着屏幕的宽度和高度。
- 然后,可以将框架大小设定为上面取值的50%,然后,告知窗口系统定位框架setLocationByPlatform(true)
将框架设置为最大:frame.setExtendedState(Frame.MAXMIZED_BOTH); - GraphicsDevice类允许以全屏模式执行应用
在组件中显示信息
- JFrame的内部结构:https://blog.csdn.net/liutao_12345/article/details/31826555
- Swing程序员最关心的是内容窗格(content pane)。在设计框架时,要使用一下代码将所有的组件添加到内容窗格中:
Container contentPane = frame.getContentPane();
Component c = ...;
contentPane.add(c);
//P416-P579太多细节了,等其他的看了再来补充