Итак, у меня есть довольно конкретная и для меня довольно сложная проблема, так как я новичок в GWT.Изменить значение виджета внутри таблицы Flex GWT при изменении значения другого виджета?
У меня есть таблица Flex GWT, которую я использую для динамического добавления строк, чьи ячейки содержат виджеты GWT. Номер строки изменяется, но количество столбцов в статике всегда 6. Каждая строка содержит ячейку с кнопкой удаления и пять ячеек, каждая со своим собственным текстовым полем.
Что мне нужно сделать, так или иначе кодировать отношения между текстовым полем в ячейке 6 одной строки и текстовым полем в ячейке 5 в следующей строке (и наоборот).
Чтобы проиллюстрировать: когда что-то изменяется в текстовом поле в [1,6], содержимое текстового поля в [2,5] должно быть перезаписано с тем же значением. Если текстовое поле в [2,5] изменяет текстовое поле в [1,6], необходимо также изменить. Я не могу использовать кнопку для фиксации изменений, это должно произойти через onValueChange или Blur или что-то подобное, что не требует от пользователя выполнения определенного действия.
Моя проблема связана главным образом с попыткой выяснить, как обращаться с конкретными ячейками в таблице flex и их содержимом. Для кнопки удаления решение было достаточно простым с обработчиком событий щелчка, но для этой проблемы я просто не могу придумать решение.
К сожалению, я также не могу предоставить какой-либо код, который у меня есть до сих пор, так как это деловая тайна. Я могу только дать широкое описание проблемы, как выше.
EDIT: На самом деле, это, вероятно, больше проблема отсутствия большого количества кода с точки зрения этой конкретной проблемы.
У меня есть таблица flex, изначально только строка заголовка. После нажатия кнопки под этой таблицей вызывается метод addNewField(), который содержит только создание, настройку значений по умолчанию и добавление текстовых полей в новую строку.
addNewField() {
int rows = flextable.getRowCount();
Button removeBtn = new Button("x");
removeBtn.getElement().setId(Integer.toString(rows));
//then the button's event handler
TextBox name = new TextBox();
name.setText("something");
flextable.setWidget(rows, 0, "name");
//repeat 4 more times with incrementing columns for the other widgets
}
Таким образом, я добавляю целые строки редактируемых текстовых полей. Мне нужен способ повлиять на значения 6-го столбца TextBox выбранной строки и 5-го столбца TextBox выбранной строки + 1.
EDIT2: Я пробовал грязный вариант, чтобы посмотреть, как он пойдет и как-то сравнение внутри if ломает приложение. Компилятор обнаруживает исключение nullpointer, и я не могу даже отлаживать его с помощью контрольных точек, потому что он не может скомпилироваться и не запускаться. Однако я не могу понять, почему. Я бросил код непосредственно в мероприятие для тестирования, поэтому прошу прощения за уродство.
TextBox bis = new TextBox();
bis.setText(rows + ":10:00");
subs.setWidget(rows, 5, bis);
bis.addValueChangeHandler(new ValueChangeHandler<String>()
{
@Override
public void onValueChange(ValueChangeEvent<String> event)
{
allRows: for (int i = 0; i < subs.getRowCount(); i++)
{
for (int j = 0; j < subs.getCellCount(i); j++)
{
if (subs.getWidget(i, j) == bis)
{
TextBox widgetAtColumnSix = ((TextBox) subs.getWidget(i, 5));
String text = widgetAtColumnSix.getText();
TextBox widgetAtColumnFiveRowPlusOne = ((TextBox) subs.getWidget(i + 1, 4));
widgetAtColumnFiveRowPlusOne.setText(text);
break allRows;
}
}
}
}
});
На самом деле вы можете привести пример кода, который работает, не отрывая деловые секреты.Показывать, что вы сделали, очень помогло бы. – Tobika