Swing应用程序框架API绪论

Better Swing Application Framework-开源 这是Swing应用程序框架(JSR 296)的分支。 BSAF项目的官方主页位于http://kenai.com/projects/bsaf-所有源代码存储库,讨论列表,论坛和资源都在Kenai托管。 立即下载

 

概述

本文档是原型Swing应用程序框架的简介,目标读者是那些愿意评论初始原型的的开发者。它既不是综合的教程,也不是开发者指南,它只是通过示例引入框架主要特性的概观。在检查规格说明(javadoc)和实现之前,阅读本材料是明智之举。

目标

本API的目标是由原始的Java规格请求(JSR) JSR-296所定义, 它在2006年5月批准。 其整体目标是简化构建Swing应用程序,让桌面Java开发人员对此的工作也是直截了当的。通过提供一小组类,也叫“框架”来达到此目标。框架定义了对大多数桌面应用程序的共有的基础设施:

  • 应用程序生命周期管理,特别是GUI的启动和关闭。
  • 对资源管理和载入的支持,这些资源是字符串,格式化的消息,图像,颜色,字体以及桌面应用程序共有的其他类型的资源。
  • 对动作定义,管理和绑定的支持,其中包含了异步运行的动作(在后台运行)。
  • 持久化会话状态:支持自动地,有选择地保存应用程序一次运行到下次运行的GUI状态。 比如顶层的窗口几何位置。

框架API概述

框架应用程序建立Application基类的子类,它定义了应用程序的生命周期,特别是应用程序的启动时所为,关闭时所为。当应用程序启动时,建立这个子类的单个实例。ApplicationContext 单体支持Application类的子类。它提供对动作,资源,任务,对话状态和存储和其它对象和服务的访问。它对应用程序来说是全局的。框架的整体结构可根据这两个单体来描述.

 

SR-296架构:应用程序(Application),ApplicationContext 单体模式

免责声明

这是初稿。在许多方面未完成,并且这里所述的API的确在演进当中。它打算为那些对框架API当前状态好奇并能容忍其瑕疵的开发人员所作。我希望它将激发那种让代码和文档下次修订更好的建设性反馈来。

应用程序框架示例

对开发者来说,熟悉新的API最容易的方法是通过学习几个示例。本节提供一系列示例增量式地展示许多API最为重要的方面。每个示例的源代码可在示例包中找到。

下面的示例节包含类它们依赖的框架类的简单梗概。要获得更完整的解释,请参见下面主要章节,或者查询javadoc规范。

基于Hello World的Application

为了编写应用程序,只需要做几件事情:

  • 扩展Application 类并覆盖startup方法。 startup方法应当建立和显示应用程序初始的GUI。
  • 当应用程序退出时,当用户关闭最顶层的窗口时,调用Application.exit()。这将导致应用程序让exitListeners运行并最终运行Application.shudown().
  • 在main方法里,调用Application.launch方法。这将构建并启动在事件分派线程上的Application子类。

下列实例正是这样做的。实际上基于SingleFrameApplication类这种应用程序非常简单,因为它处理应用程序JFrame的构建和配置。但是本例这个版本应当使得在SingleFrameApplication 类里的“钩子下面(under the hood)”发生的事情更加明了。

 

public class ApplicationExample1 extends Application {
    JFrame mainFrame = null;
    @Override protected void startup(String[] ignoreArgs) {
        JLabel label = new JLabel("Hello World", JLabel.CENTER);
        label.setFont(new Font("LucidaSans", Font.PLAIN, 32));
        mainFrame = new JFrame(" Hello World ");
        mainFrame.add(label, BorderLayout.CENTER);
        mainFrame.addWindowListener(new MainFrameListener());
        mainFrame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
        mainFrame.pack();
        mainFrame.setLocationRelativeTo(null);  // center the window
        mainFrame.setVisible(true);
    }
    private class MainFrameListener extends WindowAdapter {
        public void windowClosing(WindowEvent e) {
            exit(e);
        }
    }
    public static void main(String[] args) {
        launch(ApplicationExample1.class, args);
    }
}
    

 

如果运行ApplicationExample1,结果如下:

ApplicationExample1 (Hello World) 屏幕截图

在此仍然存在许多(JFrame)样板,因为应用程序基类不能假定应用程序到底构建GUI的数量。下一个示例显示了通过使用一个扩展Application 叫做SingleFrameApplication的类,如何更简单地完成相同的工作。

基于Hello World的SingleFrameApplication

为了建立只有一个主JFrame的应用程序,只要扩展SingleFrameApplication类即可。应用程序的子类应当覆盖建立应用程序的主GUI面板的startup方法,然后建立,配置和显示包含这个面板的JFrame。

 

public class SingleFrameExample1 extends SingleFrameApplication {
    public void startup(String[] args) {
        JLabel label = new JLabel(" Hello World ");
        label.setFont(new Font("LucidaSans", Font.PLAIN, 32));
        show(label);
    }
    public static void main(String[] args) {
        launch(SingleFrameExample1.class, args);
    }
}
    

 

尽管本例和前面的例子完全一致,但是建立和配置主JFrame的样本文件是由SingleFrameApplication.show 方法处理的。SingleFrameApplication也负责打点一些其它的公共的生命周期杂务,比如载入资源和保存/恢复对话状态。

带有资源的SingleFrameApplication

在前面示例中,建立了带有文字字符串的JLable。由用户读取的字符串应当本地化。为了完成本地化,字符串应当从ResourceBundle载入。应用程序框架支持自动初始化从ResourceBundle资源载入的有名组件的特性。对“资源注入(resource injection)”的支持超出了字符串的范畴;数值的初始值,颜色,字体和大多数其它的公共桌面GUI类型都能够用资源来定义。

这里是前面例子的新版本。本例除了设置它的名称之外,对JLabel没作任何配置:

public class SingleFrameExample2 extends SingleFrameApplication {
    public void startup(String[] args) {
        JLabel label = new JLabel();
        label.setName("label");
        show(label);
    }
    public static void main(String[] args) {
        launch(SingleFrameExample2.class, args);
    }
}

 
SingleFrameExample2的ResourceBundle是以相同名字的特性文件,它驻留在资源子包里。文件中的资源定义了一个名叫"label"组件的初始值:

label.opaque = true
label.background = 0, 0, 0
label.foreground = 255, 255, 255
label.text = Hello World
label.font = Lucida-PLAIN-48
label.icon = earth.png

本例简单演示了配置从ResourceBundle的组件。在实际应用程序里,将使用很可能需要本地化的值的资源,有时是诸如颜色、字体那些和本地化值紧密相关的特性。通过用资源而不是用代码定义,隔离依赖于像图像文件之类的外部对象的组件特性也是有用的。这使得开发者比较容易理解应用程序外部资源依赖是什么,并能简化对系统的变化的处理。

如果运行SingleFrameExample2,那么其效果如下:

SingleFrameExample2 (Hello World) 屏幕截图

 

SingleFrameApplication.show方法使用ResourceMap的injectComponents方法初始化从应用程序的ResourceBundle载入的每个有名组件的特性。

退出应用程序

通过调用Applcaiton.exit方法,应用程序应当能顺利退出。当关闭主JFrame时,SingleFrameApplication的职责所在。在实际的应用程序里,确保用户在关闭是真的希望退出经常是重要的。例如,可能希望询问未保存的文档或者未完成的事务处理。在exit()真的终止应用程序之前,通过调用canExit方法轮询所有的exitListener。如果任何一个canExit方法返回false,退出过程将终止。否则,调用exitListener的willExit方法,并最终调用Appliciton 的shutdown方法。这些方法正是打理任何清扫工作的地方。

本例在下面正是用一个对话来询问用户确认退出的。

 

public class SingleFrameExample3 extends SingleFrameApplication {
    public void startup(String[] args) {
        ExitListener maybeExit = new ExitListener() {
            public boolean canExit(EventObject e) {
                int option = JOptionPane.showConfirmDialog(null, "Really Exit?");
                return option == JOptionPane.YES_OPTION;
            }
            public void willExit(EventObject e) { }
        };
        addExitListener(maybeExit);
        JButton button = new JButton();
        button.setName("button");
        button.setAction(new ActionAdapter() {
                public void actionPerformed(ActionEvent e) {
                    exit(e);
                }
            });
        show(button);
    }
    public static void main(String[] args) {
        launch(SingleFrameExample3.class, args);
    }
}

本例的ResourceBundle和前面相似,既然这样还是配置了这个JButton。也增加了一个定义主JFrame的标题的资源。SingleFrameApplication命名它建立的JFrame为"mainFrame"。

mainFrame.title = ExitListener Demo
button.background = 255, 255, 255
button.foreground = 0, 0, 0
button.text = Click to Exit
button.font = Lucida-PLAIN-48
button.icon = exit.png

如果运行SingleFrameExample3,单击窗口的关闭按钮或者按下巨大的“Click to Exit”按钮尝试退出,将提示操作者确认:

SingleFrameExample3 屏幕截图

在本例里,使用建立一个实现了javax.swing.Action的匿名类的实例的常规方法来设置按钮的动作特性。动作对象的actionPerformed方法只是调用exit。应用程序框架则通过使用新的@Action标注从而建立动作对象的建立。

Java_swing_api_中文 java_swing_api文档,是java swing 开发必不可少的学习指导文档,包含了非常全面的API说明。 立即下载

相关推荐

迁移到NetBeans平台的十个技巧

NetBeans可能是JSR-296项目的最大赢家,它能帮助开发人员在他们的项目中采取下一步行动,如果没有NetBeans,他们可能不知道该怎么做,如他们用JSR-296中的SingleFrameApplication类代替了JFrame,因为使用它能更容易与JSR-296(我拒绝把它称为Swing应用程序框架,SAF,因为这个名字太自大了,好像就没有其它Swing应用程序框架似的)接轨,特别是在NetBeans IDE的帮助下,许多开发人员都这样做了,迅速地看到了他们的开发成果。

swing api 文档

swing api 文档: https://www.apiref.com/java11-zh/java.desktop/javax/swing/package-summary.html

Blooming death的博客 2190

JAVA swing中文离线API文档

java桌面端开发手册

Swing应用程序框架(Swing Application Framework)API绪论(JSR-296)之一(翻译)

概述 本文档是原型Swing应用程序框架的简介,目标读者是那些愿意评论初始原型的的开发者。它既不是综合的教程,也不是开发者指南,它只是通过示例引入框架主要特性的概观。在检查规格说明(javadoc)和实现之前,阅读本材料是明智之举。 目标 本API的目标是由原始的Java规格请求(JSR) JSR-296所定义, 它在2006年5月批准。 其整体目标是简化构建Swing应用程序,让桌面Java开发...

网路冷眼@优快云 321

STM32F103 串口DMA + 空闲中断 实现不定长数据收发

文章目录1. 空闲中断1.1 uart_dma.c1.2 uart_dma.h1.3 main.c1.4 stm32f10x_it.c1.5 效果演示1.6 知识补充1.6.1 外设的基地址     DMA(Direct Memory Access,直接存储器访问) 是所有现代电脑的重要特色,它允许不同速度的硬件装置来沟通,而不需要依赖于 CPU 的大量中断负载。否则,CPU 需要从来源把每一片段的资料复制到暂存器,然后把它们再次写回到新的地方。在这个时间中,CPU

夏夜晚风_的博客 3万+

Halcon实战:5种边缘检测算子对比(Sobel、Roberts、Prewitt、Kirsch、Canny)

本文深入对比了Halcon中Sobel、Roberts、Prewitt、Kirsch和Canny五大边缘检测算子的实战表现与核心差异。通过工业图像实例与代码解析,提供了基于噪声水平、边缘连续性及实时性要求的场景化选型指南,帮助工程师精准选择最适合的算子以优化视觉检测流程。

weixin_29266007的博客 392

Swing部分常用API

1.首先创建一个窗口,添加画板,添加各种组件 JFrame window = new JFrame(); // JFrame中不要直接添加组件,先添加画板,Jpanel ,在Jpanel中添加组件 // window中可以添加panel ,可添加多个 JPanel panel = new JPanel(); window.add(panel); // 按钮 JButton but...

SuXinFanXing的博客 731

深入浅出DNS系列(一)- DNS杂谈

黄丝玛:班达山,你好,我记性不好,你告诉我搜狐、新浪的网站IP地址好吗? 班达山:你问问DNS先生吧,他专门干这买卖的

jiangsd198的博客 4129

Swing应用程序框架(Swing Application Framework)API绪论(JSR-296)之一

概述本文档是原型Swing应用程序框架的简介,目标读者是那些愿意评论初始原型的的开发者。它既不是综合的教程,也不是开发者指南,它只是通过示例引入框架主要特性的概观。在检查规格说明(javadoc)和实现之前,阅读本材料是明智之举。目标本API的目标是由原始的Java规格请求(JSR) JSR-296所定义, 它在2006年5月批准。 其整体目标是简化构建Swing应用程序,让桌面Jav

网路冷眼@优快云 1698

STM32使用LORA模块通信

目录 一、模块使用方法 1、模块简介 2、硬件及功能 3、传输方式 二、模块上手 1、连接 2、编写代码 usart3.h usart3.c lora.h lora.c 一、模块使用方法 本文以正点原子ATK-LORA-01模块为例进行介绍。 1、模块简介 ATK-LORA-01-V3.0(V3.0是版本号,下面均以ATK-LORA-01表示该产品)是ALIENTEK推出的一款体积小、微功率、低功耗、高性能远距离LORA无线串口模块。模块设计是采用高效的IS...

qq_54706971的博客 3万+

避坑指南:GROMACS模拟中.tpr、.xtc、.edr、.cpt文件你用对了吗?从生成到分析全流程解析

本文详细解析GROMACS分子动力学模拟中.tpr、.xtc、.edr、.cpt等核心文件的使用技巧,从文件生成到轨迹优化、能量分析的全流程避坑指南。重点介绍拓扑文件校验、轨迹格式选择、周期性边界处理等实战经验,帮助科研人员高效管理模拟数据并准确提取关键能量信息。

weixin_30631587的博客 118

Swing应用程序框架(Swing Application Framework)API绪论(JSR-296)之二

用 @Action 标注定义动作@Action标注标记打算作为Action的ctionPerformed方法的方法。ApplicationContext.getActionMap方法建立了包含由某些类定义的每个@Action的Action对象的ActionMap。ActionMap将父类链接起来,并且每个Application的子类都有父类。这样,所有的应用程序继承了从Application基

网路冷眼@优快云 1907

PotPlayer终极画质调校:深入MadVR渲染器设置,让你的显示器发挥100%潜力

本文深入探讨了如何通过MadVR渲染器优化PotPlayer的画质设置,充分发挥高端显卡和显示器的潜力。从色彩空间匹配、色深优化到HDR元数据处理,提供了一套完整的配置指南,帮助用户实现影院级视觉体验。特别适合拥有NVIDIA RTX或AMD RX系列显卡的用户进行精细调校。

weixin_42530458的博客 601

Swing应用程序框架(Swing Application Framework)API绪论(JSR-296)之二(翻译)

 用 @Action 标注定义动作@Action标注打算作为Action的actionPerformed方法。ApplicationContext.getActionMap方法建立了包含由某些类定义的每个@Action的Action对象的ActionMap。ActionMap将父类链接起来,并且每个Application的子类都有父类。这样,所有的应用程序继承了从Application

跟着猫哥学 1126

【教程4>第3章>第1节】通信系统高阶调制解调概述

高阶调制(High Order Modulation)是一种先进的数字调制技术,旨在通过增加每个符号携带的信息比特数来提高无线通信系统的数据传输速率和频谱效率。这种技术特别适用于具有较高信噪比(Signal-to-Noise Ratio, SNR)的通信环境,例如卫星通信、光纤通信以及一些高质量的无线通信链路。在数字通信中,调制是将数字信号(比特流)转换为适合在物理信道上传输的模拟信号的过程。高阶调制通过使用更多的信号状态或星座点来表示不同的比特组合,从而在一个符号周期内传输更多的信息。

FPGA/MATLAB学习教程/源码/项目合作开发 1704

openssl命令数据摘要详解(SM3、sha256、MD5、dss1、mdc2、ripemd160)

SM3是由中国密码学家设计的密码哈希函数,是中国国家密码管理局(National Cryptographic Authority,简称:CNCA)颁布的国家密码算法标准。SM3属于密码杂凑函数家族,它可以计算任意长度的消息并生成固定长度(256比特,即32字节)的哈希值。SM3生成的哈希值长度为256比特(32字节),不管输入消息的长度如何,输出始终是固定的。SM3将输入数据划分为512比特(64字节)的分组,并对每个分组进行处理。

N阶二进制的博客 4460

java毕业设计下载(全套源码+配套论文)——基于java+Java Swing+jsp的企业快信系统设计与实现

大家好,今天给大家介绍基于java+Java Swing+jsp的企业快信系统设计与实现,更多精选毕业设计项目实例见文末哦。文章目录: 项目难度:中等难度 适用场景:相关题目的毕业设计 配套论文字数:23874个字62页 包含内容:整套源码+完整毕业论文+答辩PPT+任务书+辅导视频+运行截图 很多同学询问怎么下载开题报告、论文答辩、课题报告等ppt模板,给大家找了个好用的下载工具,可以试试: 本项目全套源码及配套论文如下,有需要的朋友可以点击进行下载。如果链接失效可点击文章最下方的卡片扫码自助下载。提示:

m0_66238867的博客 847

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

【java毕业设计】基于java+swing+CS的图书销售管理系统GUI设计与实现(毕业论文+程序源码)——图书销售管理系统

1. 基于C/S的图书销售管理系统是专为图书销售单位而设计,它取代了过去会计、出纳的“账本式”记录与管理,在给工作人员带来方便快捷的同时也大大提高了他们的工作效率,加快了管理步伐,避免了账目混乱,任务繁重等问题,符合现代办公的需求。    2. 本系统主要使用Java中的GUI(图形用户界面)和AWT编程,开发环境为Eclipse,数据库采用MySQL5.0。整体框架采用三层架构模式,即显示层、业务层、数据层,大大降低了程序的耦合性。系统的主要功能包括:销售管理、库存管理、书本管理、种类管理、出版社管理.

m0_66238867的博客 6830

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

基于Java Swing与MySQL的送水管理系统设计与实现

基于Java Swing与MySQL的送水管理系统通过科学的设计与实现,有效提高了送水服务的效率和管理水平。该系统不仅实现了订单管理、库存监控、财务统计等基本功能,还具有良好的用户界面和扩展性,为送水企业提供了有力的信息化支持。未来,随着技术的不断发展,该系统还可以进一步集成移动应用、大数据分析等功能,以更好地满足市场需求。

Demo。 1174

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

java毕业设计——基于java+Java Swing+jsp的企业快信系统设计与实现(毕业论文+程序源码)——企业快信系统

大家好,今天给大家介绍基于java+Java Swing+jsp的企业快信系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦。文章目录: 项目难度:中等难度 适用场景:相关题目的毕业设计 配套论文字数:23874个字62页 包含内容:整套源码+完整毕业论文+答辩PPT+任务书+辅导视频+运行截图 资源文件目录简图如下: 提示:以下为毕业论文的简略介绍,项目源码及完整毕业论文下载地址见文末。绪论 1.1 开发背景 省略1.2 国内外发展概况 省略1.3 研究目的和意义 省略1.4 研究主要内

m0_66238867的博客 2230

java毕业设计,基于java+swing+CS的图书销售管理系统GUI设计与实现(全套源码+配套论文),图书销售管理系统

基于C/S的图书销售管理系统是专为图书销售单位而设计,它取代了过去会计、出纳的“账本式”记录与管理,在给工作人员带来方便快捷的同时也大大提高了他们的工作效率,加快了管理步伐,避免了账目混乱,任务繁重等问题,符合现代办公的需求。本系统主要使用Java中的GUI(图形用户界面)和AWT编程,开发环境为Eclipse,数据库采用MySQL5.0。整体框架采用三层架构模式,即显示层、业务层、数据层,大大降低了程序的耦合性。

m0_66238867的博客 705

java毕业设计下载(全套源码+配套论文)——基于java+swing+CS的图书销售管理系统GUI设计与实现

本文介绍了基于Java+Swing的C/S架构图书销售管理系统设计与实现。系统采用三层架构模式(显示层、业务层、数据层),使用Eclipse开发环境和MySQL5.0数据库。主要功能包括销售管理、库存管理、图书管理、种类管理和出版社管理五大模块,解决了传统"账本式"管理效率低下的问题。系统具有界面简洁、操作简便的特点,通过减少输入操作、增加快捷键等方式提升用户体验。技术实现上运用了Java GUI和AWT编程,辅以Navicat for MySQL数据库管理工具。文章详细阐述了系统需求分析、功能模块设计、技

m0_66238867的博客 245

java编程 网络大讲堂 pdf_Java编程网络大讲堂

绪论10.1 Java的发展史10.2 Java的特征10.3 Java的工作原理30.4 Java的应用领域50.5 Java的版本50.6 Java API文档60.7 Java开发工具6第一篇 Java基础篇第1章 Java简介161.1 Java到底好在哪里,高分求教161.2 Java只安装了JRE,没有安装JDK,能不能运行代码171.3 javac不是内部命令或外部命令181.4 n...

weixin_29798625的博客 225

基于AES的文件夹加密系统:Java实现与毕业设计实战指南

数据安全是计算机科学的核心议题,对称加密算法作为其基石,通过共享密钥实现高效的数据加解密。AES(高级加密标准)作为当前最主流的对称加密算法,以其高安全性和高效率,广泛应用于HTTPS、Wi-Fi保护等场景。其技术价值在于提供了标准化的加密流程,确保了数据的机密性和完整性。在工程实践中,开发者常需将AES集成到具体应用中,例如构建本地文件加密工具。本文聚焦于如何利用Java标准库的JCE实现AES-256算法,并遵循MVC架构设计一个完整的文件夹加密解密系统。该系统涉及密钥管理、文件流式处理、Swing G

weixin_34038293的博客 405
上一篇: 使用CXF发布和调用webservice之HelloWorld入门
下一篇: Using Mockito to Unit Test Java Applications
chihailf
博客等级 码龄20年 74粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值