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

相关文章

Window Server创建2台服务器的故障转移群集的图文教程

《WindowServer创建2台服务器的故障转移群集的图文教程》本文主要介绍了在WindowsServer系统上创建一个包含两台成员服务器的故障转移群集,文中通过图文示例介绍的非常详细,对大家的... 目录一、 准备条件二、在ServerB安装故障转移群集三、在ServerC安装故障转移群集,操作与Ser

windos server2022的配置故障转移服务的图文教程

《windosserver2022的配置故障转移服务的图文教程》本文主要介绍了windosserver2022的配置故障转移服务的图文教程,以确保服务和应用程序的连续性和可用性,文中通过图文介绍的非... 目录准备环境:步骤故障转移群集是 Windows Server 2022 中提供的一种功能,用于在多个

高效管理你的Linux系统: Debian操作系统常用命令指南

《高效管理你的Linux系统:Debian操作系统常用命令指南》在Debian操作系统中,了解和掌握常用命令对于提高工作效率和系统管理至关重要,本文将详细介绍Debian的常用命令,帮助读者更好地使... Debian是一个流行的linux发行版,它以其稳定性、强大的软件包管理和丰富的社区资源而闻名。在使用

龙蜥操作系统Anolis OS-23.x安装配置图解教程(保姆级)

《龙蜥操作系统AnolisOS-23.x安装配置图解教程(保姆级)》:本文主要介绍了安装和配置AnolisOS23.2系统,包括分区、软件选择、设置root密码、网络配置、主机名设置和禁用SELinux的步骤,详细内容请阅读本文,希望能对你有所帮助... ‌AnolisOS‌是由阿里云推出的开源操作系统,旨

PyTorch使用教程之Tensor包详解

《PyTorch使用教程之Tensor包详解》这篇文章介绍了PyTorch中的张量(Tensor)数据结构,包括张量的数据类型、初始化、常用操作、属性等,张量是PyTorch框架中的核心数据结构,支持... 目录1、张量Tensor2、数据类型3、初始化(构造张量)4、常用操作5、常用属性5.1 存储(st

Java如何通过反射机制获取数据类对象的属性及方法

《Java如何通过反射机制获取数据类对象的属性及方法》文章介绍了如何使用Java反射机制获取类对象的所有属性及其对应的get、set方法,以及如何通过反射机制实现类对象的实例化,感兴趣的朋友跟随小编一... 目录一、通过反射机制获取类对象的所有属性以及相应的get、set方法1.遍历类对象的所有属性2.获取

Java操作PDF文件实现签订电子合同详细教程

《Java操作PDF文件实现签订电子合同详细教程》:本文主要介绍如何在PDF中加入电子签章与电子签名的过程,包括编写Word文件、生成PDF、为PDF格式做表单、为表单赋值、生成文档以及上传到OB... 目录前言:先看效果:1.编写word文件1.2然后生成PDF格式进行保存1.3我这里是将文件保存到本地后

windows系统下shutdown重启关机命令超详细教程

《windows系统下shutdown重启关机命令超详细教程》shutdown命令是一个强大的工具,允许你通过命令行快速完成关机、重启或注销操作,本文将为你详细解析shutdown命令的使用方法,并提... 目录一、shutdown 命令简介二、shutdown 命令的基本用法三、远程关机与重启四、实际应用

Python 中 requests 与 aiohttp 在实际项目中的选择策略详解

《Python中requests与aiohttp在实际项目中的选择策略详解》本文主要介绍了Python爬虫开发中常用的两个库requests和aiohttp的使用方法及其区别,通过实际项目案... 目录一、requests 库二、aiohttp 库三、requests 和 aiohttp 的比较四、requ

python库fire使用教程

《python库fire使用教程》本文主要介绍了python库fire使用教程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录1.简介2. fire安装3. fire使用示例1.简介目前python命令行解析库用过的有:ar