第十章 图形程序设计

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程序中,有两个技术问题需要强调:
  1. 首先,所有的Swing组件必须由事件分派线程(event dispatch thread)进行配置,线程将鼠标点击和按键控制转移到用户接口组件;EventQueue.invokeLater(()-> {statements});
  2. 定义一个用户关闭这个框架时的响应动作。选择这个响应动作的语句是 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太多细节了,等其他的看了再来补充

你可能感兴趣的:(第十章 图形程序设计)