如何从ComboBox $ ComboBox选择模型获取对父对象的引用

问题描述 投票:1回答:1

您好我被困在一个点上获取对包含ComboBox的父对象的引用$ ComboBoxSelectionModel是否有可能以某种方式访问​​它?

我想编写单个ChangeListener并为许多ComboBox注册它,然后在ChangeListener对象中更改伪类状态,但我需要一个对其应该更改的Object的引用。

new ChangeListener<Object>() {

        @Override
        public void changed(ObservableValue<?> observable, Object oldValue, Object newValue) {

            if (observable instanceof ReadOnlyObjectProperty)
                ((ReadOnlyObjectProperty) observable).getBean();

        }
    };

这将返回ComboBox $ ComboBoxSelectionModel @ 7a1f9092但是如何访问包含此选择模型的ComboBox对象?

谢谢

javafx
1个回答
0
投票

1)使用功能(James_D建议):

comboBox.getSelectionModel().selectedItemProperty().addListener(getListener(comboBox));

ChangeListener<YourType> getListener(ComboBox<YourType> comboBox){
    return (o,ov,nv)->{
        // Use comboBox here
    };
}

2)使用反射:

ChangeListener<YourType> listener = (o,ov,nv)->{
    try{
        ComboBox<?> comboBox = getCaller(o);
        ...
    } catch (NoSuchFieldException | IllegalAccessException e) {
        ...
    }
}
ComboBox<?> getCaller(ObservableValue<?> observable) throws NoSuchFieldException, IllegalAccessException {
    final Object bean = ((ReadOnlyProperty<?>)observable).getBean();
    final Class<?> selectionModelClass = bean.getClass();
    final Field field = selectionModelClass.getDeclaredField("comboBox");
    field.setAccessible(true);
    return (ComboBox<?>) field.get(bean);
}

要获得ChoiceBox使用:selectionModelClass.getDeclaredField(“choiceBox”);

© www.soinside.com 2019 - 2024. All rights reserved.