Здравствуйте!
Я использую detailsGEnerator, как в примере, и в функции getContent, создаю таблицу с выбранным элементом большой таблицы , как мне сделать, чтобы при выборе другой строки таблицы, подробная информация о предыдущей выбранной строке автоматически закрывалась, а не по кнопке closeButton. Или пусть не закрывается,но проблема в том,что содержимое таблицы маленькой из detailsGenerator меняется на содержимое вновь выбранной строки…
Можно немного модифицировать метод обработки клика на строке из примера чтобы добиться такого поведения.
Добавить на экран атрибут для сохранения предыдущего элемента, для которого мы отобразили детали.
А в обработчике клика, перед отображением деталей строки, скрывать ранее отображенное окно деталей.
@UiController("td_NewEntity.browse")
@UiDescriptor("new-entity-browse.xml")
@LookupComponent("newEntitiesTable")
public class NewEntityBrowse extends StandardLookup<NewEntity> {
@Autowired
private UiComponents uiComponents;
@Autowired
private DataGrid<NewEntity> newEntitiesTable;
private NewEntity prevSelected = null;
@Install(to = "newEntitiesTable", subject = "detailsGenerator")
private Component newEntitiesTableDetailsGenerator(NewEntity newEntity) {
VBoxLayout mainLayout = uiComponents.create(VBoxLayout.class);
mainLayout.setWidth("100%");
mainLayout.setMargin(true);
Label<String> infoLabel = uiComponents.create(Label.TYPE_STRING);
infoLabel.setHtmlEnabled(true);
infoLabel.setStyleName("h1");
infoLabel.setValue("Detail info:" + newEntity.getName());
mainLayout.add(infoLabel);
return mainLayout;
}
@Subscribe("newEntitiesTable")
public void onNewEntitiesTableItemClick(DataGrid.ItemClickEvent<NewEntity> event) {
newEntitiesTable.setItemClickAction(new BaseAction("itemClickAction")
.withHandler(actionPerformedEvent -> {
if (prevSelected != null) {
newEntitiesTable.setDetailsVisible(prevSelected, false);
}
newEntitiesTable.setDetailsVisible(newEntitiesTable.getSingleSelected(), true);
prevSelected = newEntitiesTable.getSingleSelected();
}));
}
}
Спасибо большое, работает. Но по двойному клику, а нельзя сделать это через один клик,чтобы не возникало исключения nullpointexception?
NPE точно нет.
Тестовый проект приложил.
Чтобы детали отображались по первому клику надо сесть на другое событие - SelectionEvent
.
Выделение меняется при первом клике в строку.
В приложенном проекте есть оба варианта.
На событии ItemClickEvent
закомментировано.
Работает на SelectionEvent
по первому клику.
testDetail.zip (87.3 КБ)