Установить имя категории для полей компонентов в PropertySheet JavaFX

Пример ContolsFX для PropertySheet имеет несколько вариантов. Сначала создайте bean-компонент с помощью beaninfo. В этом случае я не могу установить категорию для каждого поля в 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;
    }

}

person Korvin Gump    schedule 17.03.2016    source источник


Ответы (2)


После расследования я обнаружил, что категории жестко запрограммированы и не могут быть изменены, когда мы используем beans. Поэтому вы должны использовать свою собственную реализацию PropertySheet.Item. В этом случае мы можем задать любое название категории свойств. Посмотрите официальный пример в проекте controlsFX, как это сделать.

person Korvin Gump    schedule 24.04.2016

Пытаться:

propDescriptors[i].setValue(org.controlsfx.property.BeanProperty.CATEGORY_LABEL_KEY, "Your category name");
person Chen Shi    schedule 17.09.2016
comment
Обычно мы предпочитаем больше объяснений, а не просто дамп кода. Что главное в вашем решении? - person Robert; 17.09.2016
comment
Просто согласно исходному коду BeanProperty.java: @Override public String getCategory() { String category = (String) this.beanPropertyDescriptor.getValue(BeanProperty.CATEGORY_LABEL_KEY); - person Chen Shi; 19.09.2016