数字值按钮输入和计算器缓冲

时间:2017-05-09 10:33:54

标签: java string wicket calculator

我正在尝试使用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;
    }
  }
}

这是我的计算器:

my calculator

0 个答案:

没有答案