I have a my own ComboBox-like field that consists of a TextField with an “open” icon in the suffix. When I use this in a Grid editor and the “open” event handler sets focus on the field I get this error.
I’ve created a test view. This works even worse than in my real app.Here it fails every time.
Am I doing something wrong?
Btw, It did not fail when I just did grid.setitems(row1, row2);
@Route(value="/test")
public class Test extends VerticalLayout {
public static class Row {
String firstName;
String lastName;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
}
public static class MyField extends TextField {
public MyField() {
super();
var icon = VaadinIcon.CHEVRON_DOWN_SMALL.create();
setSuffixComponent(icon);
icon.addClickListener(event -> MyField.this.focus());
}
}
public Test() {
var grid = new Grid<Row>();
Binder<Row> binder = new Binder(Row.class);
Editor<Row> editor = grid.getEditor();
editor.setBinder(binder);
grid.addColumn(row -> row.getFirstName())
.setHeader("First name")
.setEditorComponent(row -> {
var field = new MyField();
binder.bind(field, Row::getFirstName, Row::setFirstName);
return field;
});
grid.addColumn(row -> row.getLastName())
.setHeader("Last name")
.setEditorComponent(row -> {
var field = new MyField();
binder.bind(field, Row::getLastName, Row::setLastName);
return field;
});
var row1 = new Row();
var row2 = new Row();
var rows = List.of(row1, row2);
var listDataProvider = new ListDataProvider<Row>(rows);
grid.setItems(listDataProvider);
add(grid);
grid.getEditor().editItem(row1);
grid.addItemClickListener(e -> {
editor.editItem(e.getItem());
Component editorComponent = e.getColumn().getEditorComponent();
if (editorComponent instanceof Focusable) {
((Focusable) editorComponent).focus();
}
});
}
}