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

相关文章

Elasticsearch 在 Java 中的使用教程

《Elasticsearch在Java中的使用教程》Elasticsearch是一个分布式搜索和分析引擎,基于ApacheLucene构建,能够实现实时数据的存储、搜索、和分析,它广泛应用于全文... 目录1. Elasticsearch 简介2. 环境准备2.1 安装 Elasticsearch2.2 J

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1

Linux卸载自带jdk并安装新jdk版本的图文教程

《Linux卸载自带jdk并安装新jdk版本的图文教程》在Linux系统中,有时需要卸载预装的OpenJDK并安装特定版本的JDK,例如JDK1.8,所以本文给大家详细介绍了Linux卸载自带jdk并... 目录Ⅰ、卸载自带jdkⅡ、安装新版jdkⅠ、卸载自带jdk1、输入命令查看旧jdkrpm -qa

Java使用Curator进行ZooKeeper操作的详细教程

《Java使用Curator进行ZooKeeper操作的详细教程》ApacheCurator是一个基于ZooKeeper的Java客户端库,它极大地简化了使用ZooKeeper的开发工作,在分布式系统... 目录1、简述2、核心功能2.1 CuratorFramework2.2 Recipes3、示例实践3

springboot简单集成Security配置的教程

《springboot简单集成Security配置的教程》:本文主要介绍springboot简单集成Security配置的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录集成Security安全框架引入依赖编写配置类WebSecurityConfig(自定义资源权限规则

MySQL Workbench 安装教程(保姆级)

《MySQLWorkbench安装教程(保姆级)》MySQLWorkbench是一款强大的数据库设计和管理工具,本文主要介绍了MySQLWorkbench安装教程,文中通过图文介绍的非常详细,对大... 目录前言:详细步骤:一、检查安装的数据库版本二、在官网下载对应的mysql Workbench版本,要是

通过Docker Compose部署MySQL的详细教程

《通过DockerCompose部署MySQL的详细教程》DockerCompose作为Docker官方的容器编排工具,为MySQL数据库部署带来了显著优势,下面小编就来为大家详细介绍一... 目录一、docker Compose 部署 mysql 的优势二、环境准备与基础配置2.1 项目目录结构2.2 基

Linux安装MySQL的教程

《Linux安装MySQL的教程》:本文主要介绍Linux安装MySQL的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux安装mysql1.Mysql官网2.我的存放路径3.解压mysql文件到当前目录4.重命名一下5.创建mysql用户组和用户并修

浅析CSS 中z - index属性的作用及在什么情况下会失效

《浅析CSS中z-index属性的作用及在什么情况下会失效》z-index属性用于控制元素的堆叠顺序,值越大,元素越显示在上层,它需要元素具有定位属性(如relative、absolute、fi... 目录1. z-index 属性的作用2. z-index 失效的情况2.1 元素没有定位属性2.2 元素处

nvm如何切换与管理node版本

《nvm如何切换与管理node版本》:本文主要介绍nvm如何切换与管理node版本问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录nvm切换与管理node版本nvm安装nvm常用命令总结nvm切换与管理node版本nvm适用于多项目同时开发,然后项目适配no