zoukankan      html  css  js  c++  java
  • JDK的dt.jar和Java BeanInfo接口

    在JAVA_HOME/lib以下有两个比較重要的jar文件。tools.jar和dt.jar。

    tools.jar在上篇文章中做了简单的介绍。这里来介绍下dt.jar。

    在Oracle官方站点搜dt.jar,找到JDK and JRE File Structure这个页面,例如以下

    https://docs.oracle.com/javase/7/docs/technotes/tools/solaris/jdkfiles.html

    有例如以下的一段话

    /jdk1.7.0/lib
    Files used by the development tools. Includes tools.jar, which contains non-core classes for support of the tools and utilities in the JDK. Also includes dt.jar, the DesignTime archive of BeanInfo files that tell interactive development environments (IDE's) how to display the Java components and how to let the developer customize them for an application.翻译一下:

    /jdk1.7.0/lib

    开发工具使用的文件。包含tools.jar和dt.jar。tools.jar包含支持JDK中各个工具的非核心的类。也包含dt.jar,dt.jar是设计时BeanInfo文件的归档,告诉可交互的开发环境怎样显示Java的组件和怎样让开发人员自己定义他们的应用程序。

    dt.jar的解释中有两个点:

    1.设计时(DesignTime)是跟执行时(Runtime)对象。简单点说就是一个是敲代码的时候,一个是跑程序的时候。

    2.BeanInfo文件,关于这个BeanInfo文件,我们能够打开dt.jar文件看一下。


    确实全是xxxBeanInfo的类。再细致看一下。前面的XXX都是Swing的各个组价。

    首先查找下BeanInfo是干啥的。

    在Oracle官网查找BeanInfo。找下以下的页面,发现BeanInfo是个接口,

    https://docs.oracle.com/javase/7/docs/api/java/beans/BeanInfo.html

    先看下doc是怎么说的,以下是BeanInfo接口的Java Doc翻译,

    public interface BeanInfo

    一个bean的详细实现者,假设想提供关于这个bean的明白的信息。他能够提供一个实现了BeanInfo接口的BeanInfo类,来提供关于这个Bean的方法,属性,事件等的明白的信息。

    一个Bean的实现者不须要提供一系列完整的明白的信息。

    你能够选择你想提供的信息,剩下的信息将通过低级的反射Bean类的方法和应用标准的设计模式自己主动分析来获取。

    你有机会提供非常多不同的信息作为XyZDescriptor类的一部分。可是不必惊慌,事实上你仅仅须要提供各个构造方法须要的最小限度的核心信息。

    更形象的信息能够去查看BeanInfo接口的几个getter方法。

    JDK还提供了一个SimpleBeanInfo类,BeanInfo接口的一个简单的实现。能够简单看一下。

    上面提到一句话,tools.jar和dt.jar都是给开发工具用的。以下看一下这套API是怎么用的。

    首先写一个MyClass类

    package com.highgo.test.beaninfo;
    
    public class MyClass {
    	private String field1;
    
    	public String getField1() {
    		return field1;
    	}
    
    	public void setField1(String field1) {
    		this.field1 = field1;
    	}
    }
    
    在写一个MyClassBeanInfo类。注意这个类的命名,MyClass+BeanInfo

    package com.highgo.test.beaninfo;
    
    
    import java.awt.Image;
    import java.beans.BeanDescriptor;
    import java.beans.BeanInfo;
    import java.beans.EventSetDescriptor;
    import java.beans.MethodDescriptor;
    import java.beans.PropertyDescriptor;
    
    
    public class MyClassBeanInfo implements BeanInfo{
    
    
    	@Override
    	public BeanDescriptor getBeanDescriptor() {
    		// TODO Auto-generated method stub
    		BeanDescriptor bd = new BeanDescriptor(MyClass.class);
    		bd.setName("MyName");
    		bd.setDisplayName("MyDisplayName");
    		bd.setShortDescription("Hi, My First BeanInfo Test!");
    		return bd;
    	}
    
    
    	@Override
    	public EventSetDescriptor[] getEventSetDescriptors() {
    		// TODO Auto-generated method stub
    		return new EventSetDescriptor[0];
    	}
    
    
    	@Override
    	public int getDefaultEventIndex() {
    		// TODO Auto-generated method stub
    		return 0;
    	}
    
    
    	@Override
    	public PropertyDescriptor[] getPropertyDescriptors() {
    		// TODO Auto-generated method stub
    		return new PropertyDescriptor[0];
    	}
    
    
    	@Override
    	public int getDefaultPropertyIndex() {
    		// TODO Auto-generated method stub
    		return 0;
    	}
    
    
    	@Override
    	public MethodDescriptor[] getMethodDescriptors() {
    		// TODO Auto-generated method stub
    		return new MethodDescriptor[0];
    	}
    
    
    	@Override
    	public BeanInfo[] getAdditionalBeanInfo() {
    		// TODO Auto-generated method stub
    		return new BeanInfo[0];
    	}
    
    
    	@Override
    	public Image getIcon(int iconKind) {
    		// TODO Auto-generated method stub
    		return null;
    	}
    
    
    }

    測试一下

    import com.highgo.test.beaninfo.MyClass;
    
    public class Test{
    	public static void main(String[] args) throws IntrospectionException {
    		BeanInfo bi2 = Introspector.getBeanInfo(MyClass.class);
    		System.out.println(bi2.getBeanDescriptor());
    	}
    }
    

    控制台

    java.beans.BeanDescriptor[name=MyName; displayName=MyDisplayName; shortDescription=Hi, My First BeanInfo Test!; beanClass=class com.highgo.test.beaninfo.MyClass]
    IDE预计也基本上就是这么用的了。







  • 相关阅读:
    axure 用中继器实现下拉多选框
    excel 常用全局变量
    win10 x64 python3.6 pycharm 安装statsmodels
    Oracle 10进制转36进制
    概念数据模型设计与逻辑数据模型设计、物理数据模型设计的关系
    does not support ASP.NET compatibility 错误
    Oracle日志文件管理与查看
    oradmin相关用法
    Oracle Standby Database 实现方案
    c# 调用zebra打印指令 打印到USB端口
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5061319.html
Copyright © 2011-2022 走看看