NetBeans选择管理教程IIII 属性编辑器教程

2023-11-10 08:30

本文主要是介绍NetBeans选择管理教程IIII 属性编辑器教程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文来源:https://netbeans.apache.org/tutorials/60/nbm-property-editors.html

上一篇使用Nodes API讲述了Nodes API的某些功能。

本教程介绍了在NetBeans中使用属性编辑器的技术,包括提供自定义编辑器和自定义就地编辑器。具体来说,将涵盖以下内容:

  1. 为单个节点提供自己的属性编辑器
  2. 创建一个自定义编辑器
  3. 创建自定义就地编辑器
  4. 全局注册自定义属性编辑器

通常,您可能拥有标准属性编辑器不足的属性,或者属性类型是没有标准属性编辑器的类。NetBeans IDE包含许多常见的Swing类型的类,但是一组通用属性编辑器无法满足所有可能的需求。

本教程旨在作为之前的这些教程的补充,其代码基于其中的代码:

  • 选择管理教程I-使用TopComponent的查找

  • NetBeans选择管理教程II-使用节点

  • 使用Nodes API

您将在上一教程中从上次结束的地方开始学习,该类MyNode包装了一个APIObject对象,并为其index属性提供了一个只读属性,并为其属性提供了一个读/写date属性。

创建属性编辑器

创建属性编辑器的基础非常简单。JavaBeans API提供了一个基类,该基类PropertyEditorSupport涵盖了大多数基础知识,并且可以用于创建几乎不需要任何工作的简单属性编辑器。

属性编辑器有两个用途:在字符串之间来回转换值以显示在属性表中,以及在设置新值时对其进行验证。首先,您将创建一个属性编辑器,该属性编辑器仅提供并接受不同格式的日期。

1、右键单击该org.myorg.myeditor软件包,然后选择“新建”>“ Java类”。在向导中,将类命名为DatePropertyEditor

2、在代码编辑器中,将类签名更改为extend PropertyEditorSupport

public class DatePropertyEditor extends PropertyEditorSupport {

3、落实setAsText()getAsText()如下:

    public String getAsText() {Date d = (Date) getValue();if (d == null) {return "No Date Set";}return new SimpleDateFormat("MM/dd/yy HH:mm:ss").format(d);}public void setAsText(String s) {try {setValue(new SimpleDateFormat("MM/dd/yy HH:mm:ss").parse(s));} catch (ParseException pe) {IllegalArgumentException iae = new IllegalArgumentException("Could not parse date");throw iae;}}

4、MyNode在代码编辑器中打开。更改声明的行,createSheet方法中,dateProperty以便将变量声明为,PropertySupport.Reflection而不是Property。您将调用特定于PropertySupport.Reflection以下方法的方法:

            Property indexProp = new PropertySupport.Reflection(obj, Integer.class, "getIndex", null);
//            Property dateProp = new PropertySupport.Reflection(obj, Date.class, "date");PropertySupport.Reflection dateProp = new PropertySupport.Reflection(obj, Date.class, "date");dateProp.setPropertyEditorClass(DatePropertyEditor.class);

6、运行模块套件,使用“文件”>“打开编辑器”打开您的编辑器组件,并注意Date属性的新格式,如下所示:

创建自定义编辑器

标准`java.beans.PropertyEditor`s的另一个基本功能是具有“自定义编辑器”的功能,当您单击属性表中属性旁边的“…”按钮时,该对话框通常会显示在对话框中。

关于实现这种编辑器的细节不在本教程的讨论范围之内,但是这里是基础知识:

1、在上实现以下两种方法DatePropertyEditor

    public Component getCustomEditor() {return new JLabel("I want to be a custom editor");}public boolean supportsCustomEditor() {return true;}

2、运行套件,现在在属性表中的属性旁边有一个“…”按钮,如下所示: 单击它,您的JLabel出现:

如果您是真正执行此操作,则可以创建一个JPanel,并嵌入某种日历和/或时钟组件以使其易于设置属性。正确执行此操作所需的代码将使您分心。

3、在继续操作之前,请删除以上两种方法

创建自定义编辑器

真正有用的是在属性表中嵌入一个更好的日期编辑器。NetBeans具有一个使之成为可能的API。它涉及一些代码,但是结果值得。

由于java.net上的 SwingLabs项目生成了一个不错的日期选择器组件,因此您只需重复使用该组件即可。因此,您需要做的第一件事就是将SwingX放入NetBeans。

1、swingx.jar从 SwingLabs站点下载(出于许可原因,不能将其保存在NetBeans CVS中)。

找到一个可以用的下载地址:http://www.java2s.com/Code/Jar/s/Downloadswingx092jar.htm

2、展开SelectionSuite,右键单击Modules节点,然后选择Add New Library,如下所示:

3、浏览swingx.jar刚刚下载的。点击下一步

4、再次单击“下一步”,注意代码名称库将为 org.jdesktop.swingx,然后单击“完成”。

5、右键单击主窗口中“项目”选项卡中的“My Editor”项目节点,然后选择“属性”。

6、在“库”页面中,单击“添加依赖项”按钮,然后在新的swingx-wrapper库包装器模块上添加依赖项。

现在您可以使用日期选择器了。这将涉及实现几个NetBeans特定的接口:

  • ExPropertyEditor-属性编辑器界面,属性表可以通过该界面传递“环境”(PropertyEnv)对象,该对象使编辑者可以访问Property其正在编辑的对象以及其他内容。

  • InplaceEditor.Factory-拥有一个对象的对象的接口 InplaceEditor

  • InplaceEditor-一个接口,允许提供自定义组件以在属性表中显示。

您将实现InplaceEditor.FactoryExPropertyEditor直接DatePropertyEditor,然后创建一个InplaceEditor嵌套类:

1、DatePropertyEditor如下更改签名:

public class DatePropertyEditor extends PropertyEditorSupport implements ExPropertyEditor, InplaceEditor.Factory {

2、与前面的示例一样,请按Ctrl-Shift-I修复导入,然后使用“实施所有抽象方法”来添加缺少的方法。

3、将以下方法添加到DatePropertyEditor

    public void attachEnv(PropertyEnv env) {env.registerInplaceEditorFactory(this);}private InplaceEditor ed = null;public InplaceEditor getInplaceEditor() {if (ed == null) {ed = new Inplace();}return ed;}

4、现在,您需要实现InplaceEditor自身。这将是一个拥有一个swingx JXDatePicker组件的对象,以及一些设置其值的管道方法,并在不再使用它时处置资源。它需要一些代码,但是非常简单。只需在其中创建Inplace一个静态嵌套类即可DatePropertyEditor

5、如果还没有,请按Ctrl-Shift-I修复导入。

6、再次运行套件,使用“文件”>“打开编辑器”打开您的编辑器(实际上不再是一个编辑器),选择的一个实例,MyNode然后单击属性表中date属性的值。请注意,将出现日期选择器弹出窗口,并且其行为与应有的行为完全相同,如下所示:

全局注册DatePropertyEditor

通常,注册属性编辑器以用于给定类型的所有属性通常很有用。实际上,您DatePropertyEditor通常对类型的任何属性都有用java.util.Date。虽然有用性不是是否应注册这种属性编辑器的主要决定因素,但是如果您的应用程序或模块将定期处理Date属性,则这样做可能会很有用。

这是注册方法,DatePropertyEditor以便该类型的任何属性java.util.Date都可以DatePropertyEditor在属性表中使用:

 1、右键单击“My Editor”项目,然后从弹出菜单中选择“属性”。

2、在项目属性对话框的“库”页面上,单击“添加依赖关系”,您需要添加对Module System API的依赖关系,以便可以子类化ModuleInstall以在startup.Type上运行一些代码ModuleInstall。该对话框应自动选择“模块系统API”。按Enter或单击“确定”以从“My Editor”模块添加对Modules API的依赖关系。

3、右键单击“org.myorg.myeditor项目中的包,然后选择“新建”>“其他”。在“ NetBeans模块开发”类别下,选择“模块安装程序”。单击完成。org.openide.modules.ModuleInstall将为您创建的子类-此类包含将在启动期间运行的代码。

4、实现restored()在启动过程中运行的方法,如下所示:

    @Overridepublic void restored() {PropertyEditorManager.registerEditor(Date.class, DatePropertyEditor.class);}

该代码将注册DatePropertyEditorjava.util.Date整个系统中该类型的所有属性的默认编辑器。

5、按Ctrl-Shift-I修复导入。

请记住,只有在确实需要时才应该这样做– ModuleInstall类会减慢应用程序的启动速度,因为它们意味着启动期间必须运行更多的代码。因此,应尽可能避免使用它们。但是,如果确实需要注册许多属性编辑器,则将它们聚合到一个在启动期间注册它们的单个模块中可能是有意义的。

如果要在模块中提供属性编辑器的类型,则最好将注册代码放置在静态块中,该类在加载该类时将被调用,例如

public class Foo {static {PropertyEditorManager.registerEditor(Foo.class, FooEditor.class);}//...

注意:如果不确定在典型的会话期间将使用属性编辑器,则可以使用更好的技术PropertyEditorManager.setEditorSearchPath(),将您的软件包添加到所返回的软件包数组中PropertyEditorManager.getEditorSearchPath()。上面的代码将导致FooEditor.class被加载到内存中,这将为不使用的内容支付大约1K的内存。对于一两个属性编辑器来说,这可能是可以接受的。要获得更多信息,最好将所有属性编辑器聚合到一个程序包中,适当地命名类并注册该程序包在搜索路径中。有关注册属性编辑器的更多信息,请参见“ PropertyEditorManager ” 的javadoc 。

使用PropertyPanel

尽管您不会详细介绍它,但是值得一提的是,属性表并不是Node.Property对象有用的唯一地方;也有在一个方便的UI类org.openide.explorer.PropertySheet类调用PropertyPanel。它的功能是显示一个属性,就像在属性表中显示的一样,提供一个编辑器字段和一个自定义编辑器按钮,或者您已经调用somePropertyPanel.setPreferences(PropertyPanel.PREF_CUSTOM_EDITOR),它将显示一个自定义编辑器Property。这是一种获取合适的UI组件的便捷方法,该UI组件用于编辑具有属性编辑器的任何getter / setter对。

这篇关于NetBeans选择管理教程IIII 属性编辑器教程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/381530

相关文章

gradle第三方Jar包依赖统一管理方式

《gradle第三方Jar包依赖统一管理方式》:本文主要介绍gradle第三方Jar包依赖统一管理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录背景实现1.顶层模块build.gradle添加依赖管理插件2.顶层模块build.gradle添加所有管理依赖包

基于Python打造一个智能单词管理神器

《基于Python打造一个智能单词管理神器》这篇文章主要为大家详细介绍了如何使用Python打造一个智能单词管理神器,从查询到导出的一站式解决,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 项目概述:为什么需要这个工具2. 环境搭建与快速入门2.1 环境要求2.2 首次运行配置3. 核心功能使用指

springboot使用Scheduling实现动态增删启停定时任务教程

《springboot使用Scheduling实现动态增删启停定时任务教程》:本文主要介绍springboot使用Scheduling实现动态增删启停定时任务教程,具有很好的参考价值,希望对大家有... 目录1、配置定时任务需要的线程池2、创建ScheduledFuture的包装类3、注册定时任务,增加、删

如何为Yarn配置国内源的详细教程

《如何为Yarn配置国内源的详细教程》在使用Yarn进行项目开发时,由于网络原因,直接使用官方源可能会导致下载速度慢或连接失败,配置国内源可以显著提高包的下载速度和稳定性,本文将详细介绍如何为Yarn... 目录一、查询当前使用的镜像源二、设置国内源1. 设置为淘宝镜像源2. 设置为其他国内源三、还原为官方

Maven的使用和配置国内源的保姆级教程

《Maven的使用和配置国内源的保姆级教程》Maven是⼀个项目管理工具,基于POM(ProjectObjectModel,项目对象模型)的概念,Maven可以通过一小段描述信息来管理项目的构建,报告... 目录1. 什么是Maven?2.创建⼀个Maven项目3.Maven 核心功能4.使用Maven H

HTML5中的Microdata与历史记录管理详解

《HTML5中的Microdata与历史记录管理详解》Microdata作为HTML5新增的一个特性,它允许开发者在HTML文档中添加更多的语义信息,以便于搜索引擎和浏览器更好地理解页面内容,本文将探... 目录html5中的Mijscrodata与历史记录管理背景简介html5中的Microdata使用M

Spring 基于XML配置 bean管理 Bean-IOC的方法

《Spring基于XML配置bean管理Bean-IOC的方法》:本文主要介绍Spring基于XML配置bean管理Bean-IOC的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一... 目录一. spring学习的核心内容二. 基于 XML 配置 bean1. 通过类型来获取 bean2. 通过

IDEA自动生成注释模板的配置教程

《IDEA自动生成注释模板的配置教程》本文介绍了如何在IntelliJIDEA中配置类和方法的注释模板,包括自动生成项目名称、包名、日期和时间等内容,以及如何定制参数和返回值的注释格式,需要的朋友可以... 目录项目场景配置方法类注释模板定义类开头的注释步骤类注释效果方法注释模板定义方法开头的注释步骤方法注

python uv包管理小结

《pythonuv包管理小结》uv是一个高性能的Python包管理工具,它不仅能够高效地处理包管理和依赖解析,还提供了对Python版本管理的支持,本文主要介绍了pythonuv包管理小结,具有一... 目录安装 uv使用 uv 管理 python 版本安装指定版本的 Python查看已安装的 Python

使用Python开发一个带EPUB转换功能的Markdown编辑器

《使用Python开发一个带EPUB转换功能的Markdown编辑器》Markdown因其简单易用和强大的格式支持,成为了写作者、开发者及内容创作者的首选格式,本文将通过Python开发一个Markd... 目录应用概览代码结构与核心组件1. 初始化与布局 (__init__)2. 工具栏 (setup_t