電卓のベース処理を修正する
さて、これまでに作成した電卓のベース部分では、演算結果を標準出力に表示する仕様でした。これを、先ほどXMLでレイアウトしたTextViewに表示するように変更します。
「StringDisplay.java」のshowDisplayメソッドを修正して、TextViewを更新できるように変更します。
public class StringDisplay extends AbstractDisplay {
private TextView txt; // ←追加
public StringDisplay( TextView disp ) {
clear();
this.txt=disp; // ←追加
}
・・・省略・・・
public void showDisplay(boolean format) {
・・・省略・・・
txt.setText(sb); // ←追加
}
・・・省略・・・
「Calc.java」では、StringDisplayに更新対象となるTextViewのインスタンスを渡すためのメソッドを追加します。
public void setDisp(TextView txt){
this.disp = new StringDisplay(txt);
}
電卓のベース処理をMainActivity.javaに組み込む
では次にお待ちかねのAndroidのプログラミングを説明していきます。「MainActivity.java」の編集です。電卓のベース処理を組み込み、MainActivityクラスにonClickButtonメソッドを実装してボタンが押されたときの処理を記述していきます。
public class MainActivity extends Activity {
Calc calc = new Calc();
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView txtDisp = (TextView) findViewById(R.id.display);
calc.setDisp(txtDisp);
}
public void onClickButton(View view) {
switch (view.getId()) {
case R.id.zero:
calc.onButtonNumber(Number.ZERO);
break;
case R.id.doublezero:
calc.onButtonNumber(Number.DOUBLE_ZERO);
break;
case R.id.one:
calc.onButtonNumber(Number.ONE);
break;
case R.id.two:
calc.onButtonNumber(Number.TWO);
break;
case R.id.three:
calc.onButtonNumber(Number.THREE);
break;
case R.id.four:
calc.onButtonNumber(Number.FOUR);
break;
case R.id.five:
calc.onButtonNumber(Number.FIVE);
break;
case R.id.six:
calc.onButtonNumber(Number.SIX);
break;
case R.id.seven:
calc.onButtonNumber(Number.SEVEN);
break;
case R.id.eight:
calc.onButtonNumber(Number.EIGHT);
break;
case R.id.nine:
calc.onButtonNumber(Number.NINE);
break;
case R.id.plus:
calc.onButtonOp(Operation.PLUS);
break;
case R.id.minus:
calc.onButtonOp(Operation.MINUS);
break;
case R.id.times:
calc.onButtonOp(Operation.TIMES);
break;
case R.id.divide:
calc.onButtonOp(Operation.DIVIDE);
break;
case R.id.comma:
calc.onButtonNumber(Number.COMMA);
break;
case R.id.allclear:
calc.onButtonAllClear();
break;
case R.id.clear:
calc.onButtonClear();
break;
case R.id.equal:
calc.onButtonEquale();
break;
case R.id.sign:
calc.changeSign();
break;
default:
break;
}
}
}
onClickButtonメソッド内では、switch-case文で押されたボタンを判定して、Calcクラスのメソッドを呼び出しているだけです。 実はAndroid側のコーディングはたったこれだけです。これだけのコーディングでもちゃんと動いてくれます。
では早速実行してみましょう。
どうでしょう! これだけでも十分に電卓としての役目を果たしてくれています。
ただ、まだエラーハンドリングができていませんので、1÷0=と入力すると「Infinity」と表示されてしまいます。また演算結果が12桁以上になり、電卓の表示桁から溢れてしまう場合、上位桁しか表示されませんが、桁あふれしたことが分かりません。これは正しくエラー処理して、ユーザに通知する必要があります。
次からはエラー処理の追加をしていきたいと思います。
ここまでのコーディングに使用したプロジェクトファイルも、「サンプルファイル(途中経過)」として記事に添付しています。

