在 PropertySheet JavaFX 中设置 bean 字段的类别名称
Set category name for bean fields in PropertySheet JavaFX
PropertySheet
的 ContolsFX 示例有几个选项。首先,使用 beaninfo 创建一个 bean。在这种情况下,我无法为 PropertySheet
中的每个字段设置类别。我只能在基本类别和专家类别之间进行选择。第二个选项是使用 Map
,我可以在其中为每个字段设置类别。但我想用豆子。是否可以为 bean 字段设置类别?
public class SampleBeanBeanInfo extends SimpleBeanInfo {
private static final BeanDescriptor beanDescriptor = new BeanDescriptor(SampleBeanBeanInfo.class);
private static PropertyDescriptor[] propDescriptors;
static {
beanDescriptor.setDisplayName("Sample Bean");
}
@Override
public BeanDescriptor getBeanDescriptor() {
return beanDescriptor;
}
@Override
public int getDefaultPropertyIndex() {
return 0;
}
@Override
public PropertyDescriptor[] getPropertyDescriptors() {
if (propDescriptors == null) {
propDescriptors = new PropertyDescriptor[5];
try {
CustomPropertyDescriptor cdp = new CustomPropertyDescriptor("id", SampleBean.class, "getId", "setId");
cdp.setDisplayName("Id");
cdp.setEditable(false);
propDescriptors[0] = cdp;
propDescriptors[1] = new PropertyDescriptor("firstName", SampleBean.class, "getFirstName", "setFirstName");
propDescriptors[1].setDisplayName("First Name");
propDescriptors[2] = new PropertyDescriptor("lastName", SampleBean.class, "getLastName", "setLastName");
propDescriptors[2].setDisplayName("Last Name");
propDescriptors[3] = new PropertyDescriptor("address", SampleBean.class, "getAddress", "setAddress");
propDescriptors[3].setDisplayName("Address");
propDescriptors[3].setPropertyEditorClass(PopupPropertyEditor.class);
propDescriptors[4] = new PropertyDescriptor("hiddenValue", SampleBean.class, "getHiddenValue", "setHiddenValue");
propDescriptors[4].setDisplayName("Hidden Value");
propDescriptors[4].setHidden(true);
} catch (IntrospectionException ex) {
ex.printStackTrace();
}
}
return propDescriptors;
}
}
经过调查,我发现类别是硬编码的,在我们使用 beans
时无法更改。所以你应该使用你的自定义 PropertySheet.Item
实现。在这种情况下,我们可以为属性设置任何类别名称。查看controlsFX
项目中的官方示例如何操作。
尝试:
propDescriptors[i].setValue(org.controlsfx.property.BeanProperty.CATEGORY_LABEL_KEY, "Your category name");
PropertySheet
的 ContolsFX 示例有几个选项。首先,使用 beaninfo 创建一个 bean。在这种情况下,我无法为 PropertySheet
中的每个字段设置类别。我只能在基本类别和专家类别之间进行选择。第二个选项是使用 Map
,我可以在其中为每个字段设置类别。但我想用豆子。是否可以为 bean 字段设置类别?
public class SampleBeanBeanInfo extends SimpleBeanInfo {
private static final BeanDescriptor beanDescriptor = new BeanDescriptor(SampleBeanBeanInfo.class);
private static PropertyDescriptor[] propDescriptors;
static {
beanDescriptor.setDisplayName("Sample Bean");
}
@Override
public BeanDescriptor getBeanDescriptor() {
return beanDescriptor;
}
@Override
public int getDefaultPropertyIndex() {
return 0;
}
@Override
public PropertyDescriptor[] getPropertyDescriptors() {
if (propDescriptors == null) {
propDescriptors = new PropertyDescriptor[5];
try {
CustomPropertyDescriptor cdp = new CustomPropertyDescriptor("id", SampleBean.class, "getId", "setId");
cdp.setDisplayName("Id");
cdp.setEditable(false);
propDescriptors[0] = cdp;
propDescriptors[1] = new PropertyDescriptor("firstName", SampleBean.class, "getFirstName", "setFirstName");
propDescriptors[1].setDisplayName("First Name");
propDescriptors[2] = new PropertyDescriptor("lastName", SampleBean.class, "getLastName", "setLastName");
propDescriptors[2].setDisplayName("Last Name");
propDescriptors[3] = new PropertyDescriptor("address", SampleBean.class, "getAddress", "setAddress");
propDescriptors[3].setDisplayName("Address");
propDescriptors[3].setPropertyEditorClass(PopupPropertyEditor.class);
propDescriptors[4] = new PropertyDescriptor("hiddenValue", SampleBean.class, "getHiddenValue", "setHiddenValue");
propDescriptors[4].setDisplayName("Hidden Value");
propDescriptors[4].setHidden(true);
} catch (IntrospectionException ex) {
ex.printStackTrace();
}
}
return propDescriptors;
}
}
经过调查,我发现类别是硬编码的,在我们使用 beans
时无法更改。所以你应该使用你的自定义 PropertySheet.Item
实现。在这种情况下,我们可以为属性设置任何类别名称。查看controlsFX
项目中的官方示例如何操作。
尝试:
propDescriptors[i].setValue(org.controlsfx.property.BeanProperty.CATEGORY_LABEL_KEY, "Your category name");