java - 如何将变量传递给按钮 clickListener 事件中的方法?

标签 java vaadin7 clicklistener

我有一个带有 ClickListener 事件的按钮和一个内部方法。该方法负责在单击按钮后在 Vaadin GirdLayout 中添加新行。

private GridLayout buildDeductionsGrid(){
        GridLayout deductionsGrid = new GridLayout(13, 8);

        deductionsGrid.setSpacing(true);
        deductionsGrid.setWidth("50%");

        addDeductionsGridLabelsAndFields(deductionsGrid);

        return deductionsGrid;
    }

此方法为要插入的行创建一个网格。

private void addDeductionsGridLabelsAndFields(GridLayout deductionsGrid) {
    int rowIndex = 1;

    btnAddDeductionRow.addClickListener((Button.ClickListener) event -> addNewDeductionRow(deductionsGrid, rowIndex));
}

rowIndex 顾名思义,是需要在 addNewDeductionRow 方法中递增的行索引。第一次单击按钮时它会毫无问题地递增,但它不会保存增量,因此当第二次单击按钮时,它会尝试在按钮相同的位置添加一行首先被点击。

private void addNewDeductionRow(GridLayout deductionsGrid, int rowIndex) {
        String cbValue = deductionTypeDropdown.getValue().toString().toLowerCase();

        for (DeductionsGridRow deductionsGridRow : deductionsGridRows) {
            if (deductionsGridRow.getDeductionType().getName().toLowerCase().equals(cbValue)) {
                deductionsGrid.addComponent(deductionsGridRow.getGridRowLabel(), 0, rowIndex);

                deductionsGrid.addComponent(new Label("Amount"), 1, rowIndex);
                deductionsGrid.addComponent(deductionsGridRow.getAmount(), 2, rowIndex);
            }
        }
        rowIndex++;
    }

此方法执行其所说的操作 - 添加一个新行。

注意:deductionsGridrowIndex 被标记为最终的;我使用的是 Vaadin 7.6.2

最佳答案

您似乎总是将 1 作为 rowIndex 传递到函数中。函数内部的增量不会改变函数外部的值(即使会改变,“外部”也只是另一个具有局部作用域的变量)

也许尝试使用 GridLayout#getRows 动态确定 rowIndex .

评论后编辑

如果 getRows() 函数总是返回预定的网格大小,那么可能 GridLayout 本身就是问题所在。它似乎旨在用于布置给定的内容。当您动态创建/更改内容时,列表或表格或某些迭代组件可能是正确的工具

关于java - 如何将变量传递给按钮 clickListener 事件中的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51767761/

相关文章:

java - 我如何知道 Vaadin 7.x 中首次创建 session 的时间?

java - 如果父 bean 定义为原型(prototype),子 bean 是否自动成为原型(prototype)

java - 线程写入本地txt文件的问题

java - 在 Vaadin 7 中清除 FieldGroup

java - VAADIN 在生产模式下找不到主题

java - Libgdx 错误 clickListener

java - 为什么我的 clickListener 仅在我第二次调用它时才使我的应用程序崩溃

java - Android 翻译动画导致 Clicklistener 问题

java - 如何使用 Java 获取 JSON 中的 int 值?

java - 如何设置bean的值?