gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 10:55:48 24 4
gpt4 key购买 nike

我有一个带有 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com