Как я могу включить / отключить ячейки с помощью компонента таблицы Vaadin?

У меня есть таблица с 2 столбцами: флажок и текстовое поле. Я хочу отключить текстовое поле в зависимости от состояния соответствующего флажка (той же строки). Если флажок установлен, текстовое поле будет очищено и будет доступно только для чтения. Это возможно ? Вот мой код:

@SuppressWarnings("serial")
private Table filtersTable() {
    final Table table = new Table();
    table.setPageLength(10);
    table.setSelectable(false);
    table.setImmediate(true);
    table.setSizeFull();
    // table.setMultiSelectMode(MultiSelectMode.SIMPLE) ;
    table.addContainerProperty("Tipo filtro", CheckBox.class, null);
    table.addContainerProperty("Valor", String.class, null);
    table.setEditable(true);
    for (int i = 0; i < 15; i++) {
        TextField t = new TextField();
        t.setData(i);
        t.setMaxLength(50);
        t.setValue("valor " + i);
        t.setImmediate(true);
        t.setWidth(30, UNITS_PERCENTAGE);
        CheckBox c = new CheckBox(" filtro " + i);
        c.setWidth(30, UNITS_PERCENTAGE);
        c.setData(i);
        c.setImmediate(true);
        c.addListener(new ValueChangeListener() {
            @Override
            public void valueChange(ValueChangeEvent event) {
              // within this, could I access the respective row ID
              // (i) then enable/disable TextField t on second column ?
              System.out.println("event.getProperty().getValue()="
                        + event.getProperty().getValue());
            }
        });
        table.addItem(new Object[] { c, t }, i);
    }
    return table;
}

Спасибо


person Rodolfo    schedule 23.09.2011    source источник


Ответы (2)


Это стало возможным благодаря небольшим изменениям в вашем коде. Не самый лучший способ, но самый простой.

Во-первых, вы должны установить для второго столбца (Доблесть) значение TextField.class, а не String.class.

Здесь изменение:

table.addContainerProperty("Valor", TextField.class, null);

Вместо того, чтобы сохранять переменную i в CheckBox.setData(), я предлагаю вам связать ваш checkBox с TextField той же строки, например:

c.setData(t);

Наконец, я немного изменил вашего слушателя:

c.addListener(new Property.ValueChangeListener() {
            public void valueChange(ValueChangeEvent event) {

                CheckBox checkBox = (CheckBox)event.getProperty();
                if((Boolean) checkBox.getValue())
                {
                    TextField associatedTextField = (TextField)checkBox.getData();

                    //Do all your stuff with the TextField
                    associatedTextField.setReadOnly(true);
                }
            }
        });

Надеюсь, это сработает для вас!

С уважением, Эрик

person Community    schedule 24.09.2011

person    schedule
comment
Пожалуйста, избегайте простой публикации кода, а лучше объясните код, который вы разместили, чтобы OP понял, что вы сделали, и этот сайт не превратился для меня в код записи, пожалуйста, сайт. - person ThreeFx; 11.08.2014