是否可以通过标记从 Vaadin 中的布局获取组件?

Is it possible to get a component from layout in Vaadin by labeling it?

我有一个问题。是否可以通过用特定名称或其他名称标记来从 Vaadin 中的布局中获取组件?

假设我们有这段代码。

    NumberField totalSamples = new NumberField();
    totalSamples.setValue(0d);
    totalSamples.setEnabled(false);
    Label label = new Label("Total samples:");
    Button start = new Button("Start");
    row = new HorizontalLayout();
    row.add(start, label, totalSamples);
    layout.add(row);

如果我想从layout获取label对象,首先需要获取row对象,如果我不知道所有对象的索引。有没有办法通过为它们设置特定的编号或名称来获取这些对象?

    Button start = layout.getComponentAt(index)

使用集合。

Vaadin 对象只是 Java 对象。因此,当您实例化小部件时,将它们添加到 List 或其他符合您需要的集合中。

您的集合可以作为成员变量存储在外部布局中 class。

在您需要跟踪动态创建的行(其中每个行都有三个小部件)的特定情况下,创建一个 class。 class 应该扩展 HorizontalLayout。 class 将具有三个成员变量,每个变量都已命名,以便您稍后可以单独访问它们。

class Row extends HorizontalLayout {

    NumberField totalSamples ;
    Label label ;
    Button start ;

    // Constructor
    public Row ( … ) {
        totalSamples = … ;
        label = … ;
        start = … ;
        this.add( label , totalSamples , start ) ;
    }

}

除了 Vaadin 小部件,您还可以向此 Row class 添加其他成员变量。如果每一行代表贵公司生产的特定产品,则添加一个 productId 字段。或者您可能希望单独跟踪每一行以进行日志记录、调试或审计跟踪。如果是这样,请将 UUID 字段添加到 class。

Row class 可以嵌套在外部布局 class 中,因为您在应用程序的其他任何地方都不需要它。

在您的外部布局上,实例化、收集和放置行。