이 섹션에서는 Visual Editor for Java에서 사용할 Java Bean의 BeanInfo 클래스를 쓰는 경우 사용할 수 있는 몇 가지 규칙을 설명합니다.
Visual Editor for Java는 BeanInfo 클래스에 설명된 특성 설명자를 사용하여 특성 보기의 항목 목록 및 이러한 항목의 편집 방법을 설정합니다.
java.beans.PropertyDescriptor가 숨겨지면 특성 표시기 내에서 사용할 수 없습니다. 그러나 숨겨진 특성의 Set 메소드는 여전히 코드 생성기로 구문 분석되고 활성 Bean에 적용됩니다.
특성이 숨겨져 있어도 코드 구문 분석에는 사용되지만 다른 비주얼 편집기 보기 또는 기능에는 포함되지 않습니다. VisualAge for Java를 사용하여 특성 보기에서 특성을 제외할 수 있지만 다른 기능에서는 계속 사용할 수 있습니다. 예를 들어, 디자인 시간을 false로 만들어서 연결을 설정하는 것. Visual Editor for Java에 연결 성능이 없어도 디자인 시간 특성 개념은 계속 수행됩니다. 특성 디자인 시간을 false로 하려면 속성 값을 ivjDesignTimeProperty 키 및 Boolean.FALSE 값으로 설정해야 합니다.
예를 들어, 이름 특성(public void setName(String) 및 public String getName() 메소드 쌍에서)이 있는 MyJavaBean 클래스에 대해 BeanInfo 클래스를 작성 중이면, getPropertyDescriptors() 메소드를 다음과 같이 작성할 수 있습니다.
public PropertyDescriptor[] getPropertyDescriptors() { PropertyDescriptor[] result = new PropertyDescriptor[1]; try{ PropertyDescriptor directionDescriptor = new PropertyDescriptor("direction",MyJavaBean.class); directionDescriptor.setValue("enumerationValues",new Object[]{ "North",new Integer(myclasses.CompassPoint.NORTH),"myclasses.CompassPoint.NORTH", "East",new Integer(myclasses.CompassPoint.EAST),"myclasses.CompassPoint.EAST", "South",new Integer(myclasses.CompassPoint.SOUTH),"myclasses.CompassPoint.SOUTH", "West",new Integer(myclasses.CompassPoint.WEST),"myclasses.CompassPoint.WEST" }); result[0] = directionDescriptor; } catch ( IntrospectionError exc ) { } return result; }
특성 보기에서 특성을 선택하면 새 값을 지정할 수 있는 값 열에 편집기가 작성됩니다. 특성에 대한 편집기를 계산하기 위해 특성 편집기에 대해 java.beans.PropertyDescriptor를 조회합니다. 연관된 특성 편집기가 있으면 사용됩니다. 그렇지 않으면 특성 유형에 대해 작업하도록 정의된 편집기가 있습니다. 유형에 대해 미리 정의된 특성 편집기의 목록에는 영향을 줄 수 없습니다. 특성 설명자에 java.beans.PropertyEditor가 있거나 특성 유형이 있으면, 특성 보기는 작성할 편집기의 유형을 결정합니다. 사용되는 규칙은 다음과 같습니다.
모든 java.beans.PropertyEditor에 대해 메소드 public String getJavaInitializationString()도 구체화되어야 합니다. 이로써 Java 소스 코드에서 특성 설명자의 set 메소드 인수로서 사용된 문자열이 리턴됩니다. 이 문자열은 값을 리턴해야 하고, 문자열에서 참조한 유형은 완전히 규정되어야 하지만 작성 중인 클래스에서 import 문과는 무관합니다. BeanInfo가 템플리트 JRE 클래스 java.beans.SimpleBeanInfo를 지정하면 메소드가 추상이 아니며 계승되어 '???'로 리턴됩니다. 클래스를 올바르게 구체화해야 합니다.
특성 설명자에 public String[] getTags() 메소드를 사용하여 목록을 가져오는 방법보다 간단하게 값 목록을 지정할 수 있는 방법이 있습니다. 속성 값은 enumerationValues 키를 비롯하여 목록에서 displayName의 항목이 3중으로 배열된 값, int에 입력되고 값 0,1,2 3을 가질 수 있는 direction이라는 특성을 예로 들어보십시오. 이러한 특성은 myclasses.CompassPoint 클래스에서 정적 필드 NORTH, EAST, SOUTH 및 WEST를 참조합니다. 특성 설명자는 다음과 같이 작성될 수 있습니다.
public PropertyDescriptor[] getPropertyDescriptors() { PropertyDescriptor[] result = new PropertyDescriptor[1]; try{ PropertyDescriptor directionDescriptor = new PropertyDescriptor("direction",MyJavaBean.class); directionDescriptor.setValue("enumerationValues",new Object[]{ "North",new Integer(myclasses.CompassPoint.NORTH),"myclasses.CompassPoint.NORTH", "East",new Integer(myclasses.CompassPoint.EAST),"myclasses.CompassPoint.EAST", "South",new Integer(myclasses.CompassPoint.SOUTH),"myclasses.CompassPoint.SOUTH", "West",new Integer(myclasses.CompassPoint.WEST),"myclasses.CompassPoint.WEST" }); result[0] = directionDescriptor; } catch ( IntrospectionError exc ) { } return result; }
각 항목에서 두 번째 값은 myclasses.CompoassPoint.NORTH와 같은 int 정적 필드가 아니지만, 대신 java.lang.Integer의 인스턴스입니다. 이것은 Object에 입력된 배열에 원시 유형을 삽입할 수 없으므로, 대신 그에 상당하는 java.lang equivalent을 사용해야 하기 때문입니다.
Java Bean에 표시된 이벤트의 목록은 이벤트 설명자에서 선호되는 메소드 설명자입니다.
어댑터 클래스를 사용할 수 있으면, "eventAdapterClass" 키가 있는 이름 지정된 속성으로 java.beans.EventDescriptor에 추가해야 합니다. 예를 들면 다음과 같습니다.
EventSetDescriptor focusEventSetDescriptor = new EventSetDescriptor( java.awt.Component.class, "focus", java.awt.event.FocusListener.class, new String[] { "focusGained(java.awt.event.FocusEvent)", "focusLost(java.awt.event.FocusEvent)" }, "addFocusListener(java.awt.event.FocusListener)", "removeFocusListener(java.awt.event.FocusListener" ); focusEventSetDescriptor.setValue("eventAdapterClass", "java.awt.event.FocusAdapter");
상위 주제: BeanInfo 클래스 및 검사