Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PropertySheet JavaFX中为bean字段设置类别名称_Java_Javafx_Controlsfx_Propertysheet - Fatal编程技术网

在PropertySheet JavaFX中为bean字段设置类别名称

在PropertySheet JavaFX中为bean字段设置类别名称,java,javafx,controlsfx,propertysheet,Java,Javafx,Controlsfx,Propertysheet,PropertySheet的ContolsFX示例有几个选项。首先,使用beaninfo创建一个bean。在这种情况下,我无法为PropertySheet中的每个字段设置类别。我只能在基本类别和专家类别之间进行选择。第二个选项是使用Map,在这里我可以为每个字段设置类别。但是我想用豆子。可以为bean字段设置类别吗 public class SampleBeanBeanInfo extends SimpleBeanInfo { private static final BeanDesc

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;
    }

}

经过调查,我发现类别是硬编码的,当我们使用
bean
时无法更改。因此,您应该使用自定义的
属性表.Item
实现。在这种情况下,我们可以为属性设置任何类别名称。查看
controlsFX
项目中的官方示例如何操作。

尝试:

propDescriptors[i].setValue(org.controlsfx.property.BeanProperty.CATEGORY_LABEL_KEY, "Your category name");

我们通常更喜欢解释,而不仅仅是代码转储。您的解决方案的关键是什么?只需根据BeanProperty.java的源代码:@Override public String getCategory(){String category=(String)this.BeanProperty descriptor.getValue(BeanProperty.category_LABEL_key);