【发布时间】:2016-10-27 11:18:51
【问题描述】:
好的,所以我有一个非常具体且对我来说非常复杂的问题,因为我是 GWT 新手。
我有一个 GWT 弹性表,用于动态添加行,其单元格包含 GWT 小部件。行号发生变化,但静态的列数始终为 6。每行包含一个带有删除按钮的单元格和五个单元格,每个单元格都有自己的文本框。
我需要做的是以某种方式在一行的单元格 6 中的文本框和下一行的单元格 5 中的文本框之间编写一种关系(反之亦然)。
为了说明:当 [1,6] 处的文本框发生变化时,需要用相同的值覆盖 [2,5] 处的文本框内容。如果 [2,5] 处的文本框更改,则 [1,6] 处的文本框也需要更改。我不能使用按钮来提交更改,它需要通过 onValueChange 或 Blur 或类似的方式发生,这不需要用户执行特定操作。
我的问题主要源于试图弄清楚如何处理 flex 表中的特定单元格及其内容。对于删除按钮,使用单击事件处理程序很容易解决,但对于这个问题,我似乎无法提出解决方案。
很遗憾,我也无法提供到目前为止我拥有的任何代码,因为它是商业机密。我只能对上述问题进行广泛的描述。
编辑: 实际上,就这个具体问题而言,可能更多的是代码不多的问题。
我拥有的是一个弹性表格,它最初只有标题行。单击此表下方的按钮后,将调用 addNewField() 方法,该方法仅包含创建、设置默认值以及将文本字段添加到新行中。
addNewField() {
int rows = flextable.getRowCount();
Button removeBtn = new Button("x");
removeBtn.getElement().setId(Integer.toString(rows));
//then the button's event handler
TextBox name = new TextBox();
name.setText("something");
flextable.setWidget(rows, 0, "name");
//repeat 4 more times with incrementing columns for the other widgets
}
这样我可以添加整行可编辑的文本框。我需要一种方法来影响所选行的第 6 列 TextBox 和所选行 + 1 的第 5 列 TextBox 的值。
EDIT2:我尝试了dirty选项只是为了看看它会如何运行,并且if内部的比较会破坏应用程序。编译器检测到空指针异常,我什至无法使用断点对其进行调试,因为它无法编译并且无法启动。我不知道为什么。出于测试目的,我将代码直接放入事件中,请原谅丑陋。
TextBox bis = new TextBox();
bis.setText(rows + ":10:00");
subs.setWidget(rows, 5, bis);
bis.addValueChangeHandler(new ValueChangeHandler<String>()
{
@Override
public void onValueChange(ValueChangeEvent<String> event)
{
allRows: for (int i = 0; i < subs.getRowCount(); i++)
{
for (int j = 0; j < subs.getCellCount(i); j++)
{
if ( subs.getWidget(i, j) == bis )
{
TextBox widgetAtColumnSix = ((TextBox) subs.getWidget(i, 5));
String text = widgetAtColumnSix.getText();
TextBox widgetAtColumnFiveRowPlusOne = ((TextBox) subs.getWidget(i + 1, 4));
widgetAtColumnFiveRowPlusOne.setText(text);
break allRows;
}
}
}
}
});
【问题讨论】:
-
其实你可以给出一个不泄露商业机密的代码示例。展示你的所作所为会有很大帮助
标签: gwt