使用Java开发窗口应用程序有两种选择:
1.AWT: Abstract Window Toolkit
2.JFC: Java Foundation Classes / Swing
本文主要介绍Swing设计基本要素:
容器,组件,版面管理员,事件与监听器等基本概念
要了解Swing必须了解Swing继承架构,Swing是基于AWT而创建,因此要了解Swing继承架构必须先了解AWT继承架构
一.AWT继承架构
AWT提供基本的GUI组件,用在所有的Java applets及应用程序中。
具有可扩展的超类,它们的属性是继承的。
确保显示在屏幕上的每个GUI组件都是抽象类组件的子类。
GUI组件根据作用可以分为两种:基本组件和容器组件。
基本组件又称构件,诸如按钮、文本框之类的图形界面元素。
容器是一种比较特殊的组件,可以容纳其他组件,容器如窗口、对话框等。
所有的容器类都是java.awt.Container的直接或间接子类
Container,它是Component的一个子类,而且包括两个主要子类:Panel,Window。
注:容器不但能容纳组件,还能容纳其他容器,这一事实对于建立复杂的布局是关键的,也是基本的。
各种组件的父类:
java.awt.Component 或
java.awt.MenuComponent
Component: 英 [kəmˈpəʊnənt] 美 [kəmˈpoʊnənt]
n. 成分; 组分; 零件; [数] 要素;
adj. 成分的; 组成的; 合成的; 构成的;
Component的子类:
Button, Label, TextComponent
MenuComponent的子类:(菜单类)
MenuBar, MenuItem
容器: Container
是Component的重要子类
其实例可以容纳其他Component,因而可递归组合为复杂的窗口画面.
Container主要有两个子类:
Window:
Window包括两个重要子类:
(1)Frame: 有标题栏,工具栏且可改变大小的窗口组件
(2)Dialog: 可显示简单的对话框,没有工具栏,不能改变大小Panel:
(1)容纳于Container
(2)嵌入浏览器&在其中可以放入组件或其他Container
在AWT中,主要就是使用Window+Dialog+Panel来进行窗口组件组合
二.Swing继承框架
Swing以AWT为基础,功能繁多,且开发出来的窗口组件在不同平台会有一致观感
重要概念:
Swing所有了组件都是Container的子类实例
基本元素(1) JFrame
可独立显示,不用加入其他容器
例子:
import javax.swing.*;
/**
* Created by butter on 16-11-21.
*/
public class JNotePad extends JFrame {
public JNotePad(){
initComponents();//初始组件外观
//initEventListeners();//初始化组件事件倾听器
}
private void initEventListeners() {
//事件处理
//设置按左(右)上角X按钮默认行为:关闭窗口,其实这个是默认的,不需要手动设置
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private void initComponents() {
//窗口组件设置
setTitle("新增纯文本文档");//设置窗口标题
setSize(1000, 700);//设置窗口宽高
}
public static void main(String[] args) {
//将建立的JNotePad实例与SetVisible()的动作排入事件队列
//这玩意应该是一个Runnable接口的实现
SwingUtilities.invokeLater( ()->{
new JNotePad().setVisible(true);
});
}
}
窗口上发生任何事件 : 键盘操作,鼠标点击/选中, 大小改变等
都会产生事件:Event
若对某些事件感兴趣(事件发生后想要实现相应该功能),可以对组件注册监听器(Listener),每个窗口程序都有一个事件队列,若有事件发生,都会被安排到这个队列,窗口程序会使用一条线程来处理队列中的事件,调用已注册监听器中的方法.
编辑器代码:
import jdk.nashorn.internal.scripts.JO;
import javax.swing.*;
import javax.xml.soap.Text;
import java.awt.*;
import java.awt.event.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
/**
* Created by butter on 16-11-21.
*/
/**
*
* swing开发基本步骤:
* (1)继承JFrame
* (2)定义需要的组件
* (3)创建组件
* (4)添加组件
* (5)对(顶层)窗体设置
* (6)设置显示
*/
public class JNotePad_demo2 extends JFrame{