Vaadin:如何在网格标题中触发 TextField 按键事件?

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

Vaadin V24,Java。

我有一个网格,可以保存 PojoClass 的数据。在该网格的标题中,我有一个文本字段。当您在字段中输入内容并按 Enter 键时,该值将提交到服务器,并且新行将添加到网格中。问题是网格标题内部有一些东西“窃取”了我的输入键。通过

textField.addKeyPressListener(Key.ENTER, l -> submit())
附加到 TextField 的事件侦听器似乎永远不会触发。相反,整个标题会呈现蓝色轮廓,就好像它刚刚获得焦点一样。

以下是示例代码:

Grid<PojoClass> grid = new Grid<>(PojoClass.class,false);
// grid set up here...

Grid.Column<PojoClass> column1 = cycleCountLinesGrid.addColumn(PojoClass::getSomething1)
    .setFlexGrow(1)
    .setHeader("Something1");

Grid.Column<PojoClass> column2 = cycleCountLinesGrid.addColumn(PojoClass::getSomething2)
    .setFlexGrow(1)
    .setHeader("Something2");

HeaderRow headerRow = grid.prependHeaderRow();
HeaderRow.HeaderCell headerRowCell = headerRow.join(
    column1,
    // must have at least two columns here
    column2
);

TextField textField = new TextField();
textField.setClearButtonVisible(true);
textField.setWidth(350, Unit.PIXELS);
textField.setSuffixComponent(UIUtils.createButton(VaadinIcon.ENTER, l -> submit()));
textField.setPattern("^[0-9]+$|^[Cc][0-9]*$|^[Cc]?[Ee]?[Vv]?[Aa]?[0-9]*$");
textField.addKeyPressListener(Key.ENTER, l -> submit());

headerRowCell.setComponent(
    new FlexBoxLayout(
        UIUtils.createH3Label("Scanned Items")
            .withDisplay(Display.INLINE_BLOCK)
            .withClassNames(LumoStyles.Margin.Right.M)
    ).space().with(
            UIUtils.createH4Label("Scan Item")
                .withDisplay(Display.INLINE_BLOCK)
                .withClassNames(LumoStyles.Margin.Right.M),
            textField
        )
        .withFlexDirection(FlexLayout.FlexDirection.ROW)
        .withBoxSizing(BoxSizing.BORDER_BOX)
        .withAlignItems(FlexComponent.Alignment.CENTER)
        .withJustifyContentMode(FlexComponent.JustifyContentMode.BETWEEN)
        .withSizeFull()
);

这是蓝色轮廓的图片:

如何让网格标题停止吞噬按键事件,以便调用事件侦听器函数?

events header grid vaadin keypress
1个回答
0
投票

在文本字段上尝试使用

keyDownListener
而不是
addKeyPressListener

textField.addKeyDownListener(Key.ENTER, l -> submit());
© www.soinside.com 2019 - 2024. All rights reserved.