我有一个for循环,显示文本字段和单选按钮列表。 引用小部件的最佳方法是什么,以便我可以读取文本字段并查找选中的单选按钮。 这是我的循环
for(int x = 0; x<getLoopCount(); x++)
{
answerTable.setWidget(x,0, new Label("Answer:"));
answerTable.setWidget(x,1, new TextBox());
answerTable.setWidget(x,2, new RadioButton(""));
}
有没有办法识别每个小部件,以便我可以参考它?
答案 0 :(得分:0)
您可以在创建时ValueChangeHandler
添加RadioButton
。
for(int x = 0; x<getLoopCount(); x++){
answerTable.setWidget(x,0, new Label("Answer:"));
answerTable.setWidget(x,1, new TextBox());
RadioButton rb = new RadioButton("");
rb.addValueChangeHandler(new ValueChangeHandler(){
@Override
void onValueChange(ValueChangeEvent<Boolean> event){
// Do something
}
});
answerTable.setWidget(x,2, rb);
}
ValueChangeEvent
仅在选中RadioButton
时触发。如果检查同一组中的另一个RadioButton
,则不会触发。
由于您在创建ValueChangeHandler
时添加了RadioButton
,因此您应该知道如何使用{{1}},而无需为其创建ID。
答案 1 :(得分:0)
我建议将这三个小部件组合在一个复合小部件中,如下所示:
class AnswerComposite extends Composite {
private final Label label;
private final TextBox textBox;
private final RadioButton radioButton;
public AnswerComposite() {
label = new Label("Answer:");
textBox = new TextBox();
radioButton = new RadioButton("answerGroup");
HorizontalPanel contentPanel = new HorizontalPanel();
contentPanel.add(label);
contentPanel.add(textBox);
contentPanel.add(radioButton);
initWidget(contentPanel);
}
public String getText() {
return textBox.getValue();
}
public boolean isSelected() {
return radioButton.getValue();
}
}
然后,您可以将它们添加到面板和/或将它们放在如下列表中:
VerticalPanel answersPanel = new VerticalPanel();
List<AnswerComposite> answerComposites = new ArrayList<AnswerComposite>();
for (int i = 0; i < getLoopCount(); i++) {
AnswerComposite answerComposite = new AnswerComposite();
answersPanel.add(answerComposite);
answerComposites.add(answersComposite);
}
检查你的小部件然后变得非常容易:
answerComposites.get(i).getText();
answerComposites.get(i).isSelected();
向ValueChangeHandler
添加RadioButton
可能也很方便(参见enrybo的回答)。
答案 2 :(得分:0)
让我给你一个特别的答案,所以不要关心语法,而是关心算法的想法。
abstract class MyButton
extends Button{
// provide the appropriate constructor in impl class,
// especially if using uibinder
abstract public void helloDolly(... args ...);
}
使用MyButton实例化所有这些按钮。
MyButton[] buttons = {
new MyButton(){
public void helloDolly(... args ...){
Window.alert("allo allo #1");
}
},
new MyButton(){
public void helloDolly(... args ...){
Window.alert("allo allo #2");
}
},
// blah blah black sheep ....
}
在定义处理程序时使用clickEvent.getSource()。
buttons[i].addEventHandler(
new ClickHandler(ClickEvent click){
Object src = click.getSource();
if (src !instanceOf MyButton){
throw new MyAngryException("For goodness' sake, pls use MyButton");
// or ignore
return;
}
((MyButton)src).helloDolly(... args ...);
}
)