我正在尝试使用Eclipse中的Wicket框架创建一个简单的计算器。所以我改变了我的标记以添加带数字的按钮。我试图使这个按钮的工作方式与从键盘输入相同,但我有一些问题。我使用两个隐藏字段 - 输入,buf用于写入输入值并相应地显示最终值。
所以我认为我可以将当前的buf值写入某些String(当前),然后将其添加到输入值。此当前字符串将被分配回buf并显示。但是对于数字,7,8输入字段清理,我不能创建长于1位的数字。
其他数字在buf中显示类似 null453 的内容。所以在这种情况下,可以创建长数,但是短数不能,因为输入的值只是粘在buf中的一个数字中。并且这个数字对任何操作都做出反应 - 减法,乘法。相反,它们被添加到buf字符串。
如何修改每个按钮的onSubmit()方法,以便数字可以由几个数字组成,而不是在buf中为null,并且它们会对数学运算做出反应? 我将非常感谢任何帮助。
我的代码有点乱,抱歉。我刚刚学习这项技术。
public class StatelessPage extends BasePage {
protected String buf = " ";
protected Op op;
protected String input = " ";
protected String current = buf;
public StatelessPage() {
add(new CalcForm("form"));
}
class CalcForm extends StatelessForm {
public CalcForm(String id) {
super(id, new CompoundPropertyModel(StatelessPage.this));
add(new Label("display", new ComponentPropertyModel("buf")));
add(new HiddenField("buf"));
add(new HiddenField("op") {
@Override
public IConverter getConverter(Class type) {
return new IConverter() {
public Object convertToObject(String value, Locale locale) {
return Strings.isEmpty(value) ? null : Op.valueOf(value);
}
public String convertToString(Object value, Locale locale) {
return value.toString();
}
};
}
});
add(new TextField("input"));
/*
add(new OpButton("sevend", Op.digit));
add(new OpButton("eightd", Op.digit));
add(new OpButton("nined", Op.digit));*/
add(new Button("sevend") {
@Override
public void onSubmit() {
current += input;
buf += current;
input += "7";
op = null;
}
});
add(new Button("eightd") {
@Override
public void onSubmit() {
current += input;
buf += current;
input += "8";
op = null;
}
});
add(new Button("nined") {
@Override
public void onSubmit() {
current += input;
buf += current;
input += "9";
op = null;
}
});
add(new OpButton("div", Op.div));
add(new Button("fourd") {
@Override
public void onSubmit() {
current = "" + input;
buf += current;
input += "4";
op = null;
}
});
add(new Button("fived") {
@Override
public void onSubmit() {
current = "" + input;
buf += current;
input += "5";
op = null;
}
});
add(new Button("sixd") {
@Override
public void onSubmit() {
current += input;
buf += current;
input += "6";
op = null;
}
});
add(new OpButton("mult", Op.mult));
add(new Button("oned") {
@Override
public void onSubmit() {
current += input;
buf += current;
input += "1";
op = null;
}
});
add(new Button("twod") {
@Override
public void onSubmit() {
current += input;
buf += current;
input += "2";
op = null;
}
});
add(new Button("threed") {
@Override
public void onSubmit() {
current += input;
buf += current;
input += "3";
op = null;
}
});
add(new OpButton("sub", Op.sub));
add(new Button("zerod") {
@Override
public void onSubmit() {
current += input;
buf += current;
input += "0";
apply();
}
});
add(new Button("clear") {
@Override
public void onSubmit() {
buf = "";
input = "";
op = null;
}
});
add(new Button("eq") {
@Override
public void onSubmit() {
apply();
}
});
add(new OpButton("add", Op.add));
}
}
void apply() {
if (op == null)
buf = input;
else
buf = op.eval(new BigDecimal(buf), new BigDecimal(input)).toString();
}
class OpButton extends Button {
private Op myOp;
public OpButton(String id, Op myOp) {
super(id);
this.myOp = myOp;
}
@Override
public void onSubmit() {
apply();
op = myOp;
}
}
}
这是我的计算器: