Swing概述
Swing 是 GUI ( 图 形 用 户 界 面 ) 开 发 工 具 包 , 在 AWT ( 抽 象 窗 口 工 具 包 ) 的 基 础 上 使 开 发 跨 平 台 的 Java 应 用 程 序 界 面 成 为 可 能 , 早 期 的 AWT 组 件 开 发 的 图 形 用 户 界 面 , 要 依 赖 于 本 地 系 统 , 当 把 AWT 组 件 开 发 的 应 用 程 序 移 植 到 其 他 平 台 的 系 统 上 运 行 时 , 不 能 保 证 其 外 观 风 格 , 因 此 AWT 组 件 是 依 赖 于 本 地 系 统 平 台 的 。
使 用 Swing 开 发 的 Java 应 用 程 序 , 其 界 面 是 不 受 本 地 系 统 平 台 限 制 的 , 也 就 是 说 Swing 开 发 的 Java 应 用 程 序 移 植 到 其 他 系 统 平 台 上 时 , 其 界 面 外 观 是 不 会 改 变 的 , 因 为 Swing 组 件 内 部 提 供 了 相 应 的 用 户 界 面 , 而 这 些 用 户 界 面 是 纯 Java 语 言 编 写 的 而 不 依 赖 于 本 地 系 统 平 台 , 所 以 Swing 开 发 的 应 用 程 序 可 以 方 便 地 移 植 。
虽 然 Swing提 供 的 组 件 可 以 方 便 地 开 发 Java 应 用 程 序 , 但 是 Swing 并 不 能 取 代 AWT,在 开 发 swing 程 序 时 通 常 要 借 助 于 AWT 的 一 些 对 象 来 共 同 完 成 应 用 程 序 的 设 计 ·
swing 常 用 窗 体
Swing窗 体 是 Swing 的 一 个 组 件 , 同 时 也 是 创 建 图 形 化 用 户 界 面 的 容 器 , 可 以 将 其 他 组 件 放 置 在 窗 体 容 器 中 , 来 完 成 应 用 程 序 界 面 的 设 计 。
JFrame 框 架 窗 体
JFrame 窗 体 是 一 个 容 器 , 它 是 程 序 中 各 个 组 件 的 载 体 , 可 以 将 看 作 是 承 载 这 些 swing 组 件 的 容 器 。 在 开 发 应 用 程 序 时 可 以 通 过 继 承 java.swing.JFrame 类 创 建 一 个 窗 体 , 在 这 个 窗 体 中 添 加 组 件 , 同 时 为 组 件 设 置 事 件 · 由 于 该 窗 体 继 承 了 JFrame 类 , 所 以 它 拥 有 一 些 最 大 化 、 最 小 化 、 关 闭 的 按 钮 。
JFrame 在 程 序 中 的 语 法 格 式 如 下 :
JFrame jf=new JFrame(title);
Container container=jf.getContentPane();
『 jf:JFrame类的对象。
『 container:Container类的对象,可以使用JFrame对象调用getContentPane()方法获取。
我们大 致 应 该 有 这 样 一 个 概 念 , swing 组 件 的 窗 体 通 常 与 组 件 和 容 器 相 关 , 所 以 在JFrame 对 象 创 建 完 成 后 , 需 要 调 用 getContentpane() 方 法 将 窗 体 转 换 为 容 器 , 然 后 在 容 器 中 添 加 组 件 或 设 置 布 局 管 理 器 。 通 常 这 个 容 器 用 来 包 含 和 显 示 组 件 。 如 果 需 要 将 组 件 添 加 至 容 器 , 可 以 使 用 来 自 Container 类 的 add() 方 法 进 行 设 置 。 在 容 器 中 添 加 组 件 后 , 也 可 以 使 用 Container 类 的 remove() 方 法 将 这 些 组 件 从 容 器 中 删 除 。
〖 例1 〗:
在项目中创建Example类,该类集成JFrame类成为窗体,在该类中创建标签组件,并添加到窗体界面中。
import java.awt.Color;
import java.awt.Container;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import javax.swing.WindowConstants;
public class JFrameDemo extends JFrame{
public void CreateJFrame(String title){
//创建窗体
JFrame jf=new JFrame(title);
//把窗体转化为容器
Container container=jf.getContentPane();
//创建标签组件对象
JLabel jl=new JLabel("这是一个JFrame窗体");
jl.setHorizontalAlignment(SwingConstants.CENTER);
//把标签加入容器
container.add(jl);
//设置容器的背景为白色
container.setBackground(Color.white);
jf.setVisible(true); //设置窗体可见
jf.setSize(200,150); //设置窗体大小
//设置窗体的关闭方式
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new JFrameDemo().CreateJFrame("新建窗体");
}
}
结果:
在〖例1〗 中 JFrameDemo 类 继 承 了 JFrame 类 , 在 CreateJFrame() 方 法 中 实 例 化 JFrame 对 象 。
JFrame 类 的 常 用 构 造 方 法 包 括 和两 种 形 式 。
public JFrame() //无参
public JFrame(String title) //有参
//第一种形式的构造方法创建一个初始不可见、没有标题的新窗体;
//第二种形式的构造方法在实例化该JFrame对象时创建一个不可见但具有标题的窗体 。
可 以 使 用 JFrame 对 象 调 用 show()方 法 使 窗 体 可 见 , 但 是 这 个 方 法 早 己 经 被 新 版 JDK 所 弃 用 , 而 通 常 使 用 setVisible(true) 方 法 使 窗 体 可 见 。同 时 可 以 使 用 setSize(int x,int y ) 方 法 设 置 窗 体 大 小 , 其 中 x 与 y 变 量 分 别 代 表 窗 体 的 宽 与 高 。
创 建 窗 体 后 , 需 要 给 予 窗 体 一 个 关 闭 方 式 , 可 以 调 用 setDefaultCloseOperation() 方 法 关 闭 窗 体 。
Java 为 窗 体 关 闭 提 供 了 几 种 方 式 , 常 用 的 有 以 下 4 种 方 式 , 这 几 种 操 作 实 质 上 是 一 个 int 类 型 的 常 量 , 被 封 装 在 javax.swing.WindowConstants 接 口 中 。
『 DO_NOTHING_ON_CLOSE // 代表什么都不做就将窗体关闭
『 DISPOSE_ON_CLOSE //代表任何注册监听程序对象后会自动隐藏并释放窗体
『 HIDE_ON_CLOSE // 隐 藏 窗 口 的 默 认 窗 口 关 闭
『 EXIT_ON_CLOSE //退出应用程序默认窗口关闭
JDialog窗体
JDialog 窗 体 是 Swing 组 件 中 的 对 话 框 , 它 继 承 了 AWT 组 件 中 的 java.awt.Dialog 类 。
Dialog 窗 体 的 功 能 是 从 一 个 窗 体 中 弹 出 另 一 个 窗 体 , 就 像 是 在 使 用 IE 浏 览 器 时 弹 出 的 确 定 对 话 框 一 样 。 JDialog 窗 体 实 质 上 就 是 另 一 种 类 型 的 窗 体 , 它 与 JFrame 窗 体 类 似 , JDialog 窗 体 在 使 用 时 也 需 要 调 用 getcontentPane() 方 法 将 窗 体 转 换 为 容 器 , 然 后 在 容 器 中 设 置 窗 体 的 特 性 。
在 应 用 程 序 中 创 建 JDialog 窗 体 需 要 实 例 化 JDialog类 , 通 常 使 用 以 下 几 个 JDialog 类 的 构 造 方 法 。
public JDialog() //创 建 一 个 没 有 标 题 和 父 窗 体 的 对 话 框 。
public JDtalog(Framef) //创 建一个指定父窗体的对话框,但该窗体没有标题 。
public JDialog(Frame f,boolean model) //创建一个指定类型的对话框,并指定父窗体,但该窗体没有指定标题 。
public JD1alog(Framef,Stringtitle) //创建一个指定标题和父窗体的对话框。
public JDralog(Framef,Stringtitle,booleanmodel) //创建一个指定标题、窗体和模式的对话框 。
〖 例 2 〗
在 项 目 中 创 建 MyJDialog 类 , 该 类 继 承 JDialog 窗 体 , 并 在 窗 体 中 添 加 按 钮 , 当 用
户 单 击 该 按 钮 后 , 将 弹 出 一 个 对 话 框 窗 体 。
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import javax.swing.WindowConstants;
public class MyJDialog extends JDialog{ //创建类继承JDalog类
public MyJDialog(){
//实例化一个JDialog类对象,指定对话框的父窗体、窗体标题和类型。
super(new MyFrame(),"第一个JDialog窗体",true);
//创建容器
Container container=getContentPane();
//在容器中添加标签
container.add(new JLabel("这是一个对话框"));
//设置位置
setBounds(600,600,100,100);
}
public static void main(String[] args) {
new MyJDialog();
}
}
class MyFrame extends JFrame{
public MyFrame(){
JFrame jf=new JFrame(); //创建窗体对象
jf.setBounds(500, 500, 100, 100); //设置窗体位置
Container container=jf.getContentPane(); //创建容器对象
container.setLayout(null);
JLabel jl=new JLabel("这是一个JFrame窗体"); //设置标签
jl.setHorizontalAlignment(SwingConstants.CENTER);
container.add(jl); //把标签放到容器里
JButton bl=new JButton("弹出对话框"); //创建按钮
bl.setBounds(50,50,100,21);
//按钮的触发事件
bl.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
new MyJDialog().setVisible(true);
}
});
//把按钮加进容器
container.add(bl);
jf.setVisible(true); //设置窗体为可见
jf.setSize(200,150); //设置窗体位置
//设置窗体关闭方式
jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
}
结果:
解析:
在 例 子中 , 为 了 使 对 话 框 在 父 窗 体 弹 出 , 定 义 了 一 个 JFrame 窗 体 , 首 先 在 该 窗 体 中 定 义 一 个 按 钮 , 然 后 为 此 按 钮 添 加 一 个 鼠 标 单 击 监 听 事 件 这 里 使 用 new MyJDialog().setVisible(true) 语 句 使 对 话 框 窗 体 可 见 , 这 样 就 实 现 了 当 用 户 单 击 该 按 钮 后 将 弹 出 对 话 框 的 功 能 。
在 MyJDialog类 中 , 由 于 它 继 承 了 JDialog 类 , 所 以 可 以 在 构 造 方 法 中 使 用 super关 键 字 调 用 Dialog 构 造 方 法 。 在 这 里 使 用 了 public JDialog(Frame f,String title , boolean model) 形 式 的 构 造 方 法 , 相 应 地 设 置 JFrame 窗 体 以 及 对 话 框 的 标 题 和 窗 体 类 型 。
〖 例 3〗
题目:设置窗体大小
用 户 打 开 软 件 后 , 首 先 看 到 的 就 是 软 件 窗 体 的 大 小 , 那 么 如 何 设 置 窗 体 的 大 小 就 成 了 摆 在 开 发 者 面 前 的 一 个 首 要 问 题 。
在 项 目 中 创 建 窗 体 类 ControlFormSize , 在 窗 体 中 添 加 一 个 标 签 控 件 , 编 写 程 序 代 码 , 设 置 窗 体 的 标 题 、 默 认 关 闭 方 式 与 窗 体 大 小 , 然 后 在 标 签 控 件 中 显 示 对 窗 体 设 置 的 大 小 。
import java.awt.BorderLayout;
import java.awt.Container;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class ControlFormSize extends JFrame{
public ControlFormSize(){
JFrame jf=new JFrame("设置窗体大小"); //定义窗体
Container container=getContentPane(); //定义容器
container=jf.getContentPane(); //容器与窗体相关联
/*
* 窗体的关闭方式与位置跟是否可见
*/
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setBounds(500,500, 320, 320);
jf.setVisible(true);
JPanel contentPane=new JPanel(); //创建内容面板
contentPane.setLayout(new BorderLayout(0,0)); //设置布局(边框布局)
JLabel label=new JLabel("宽度:400,高度:300"); //标签控件
//把标签放入内容面板,布局为居中
contentPane.add(label,BorderLayout.CENTER);
//把内容面板放入容器
container.add(contentPane);
}
public static void main(String[] args) {
new ControlFormSize();
}
}
结果:
〖 例 4〗
题目:禁 止 改 变 窗 体 大 小
默 认 可 以 通 过 鼠 标 拖 曳 的 方 式 改 变 窗 体 大 小 , 但 是 当 用 户 单 击 “ 禁 止 改 变 窗 体 大 小 ” 按 钮 后 , 窗 体 将 会 以 一 种 对 话 框 的 方 式 进 行 显 示 , 这 时 就 不 可 以 再 用 鼠 标 拖 曳 的 方 式 改 变 窗 体 的 大 小 了 。
来源:CSDN
作者:世界上只有一个她
链接:https://blog.csdn.net/gugaopeng19940928/article/details/77333909