スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

JAVAで簡易電卓を作ってみた(画面に数値ボタン配置ver)

前にこちらの記事で画面のテキストフィールドに直接数値を入力して、
四則演算される電卓を作りました。(図1)

JAVA電卓画像

      図1.前回作った電卓



今回は画面上に数値ボタンを配置させ、
計算実行できる電卓を作りました(図2)

JAVA電卓画像2

      図2.今回作った電卓


電卓の作り方はこちらのサイトに詳しく載っていました。
(JAVAプログラミング基礎はこちらのサイトで覚えました。)


一部、上記サイトとプログラムを変更しました。
(ボタン配置とwindowを閉じた際のプログラム以外ほぼ同じです。)
プログラムを下記します。





import javax.swing.*;
import java.awt.*;
import java.awt.event.*;


class dentaku3 extends JFrame {

JTextField result = new JTextField("",20);
double stackedValue = 0.0;
boolean isStacked = false;
boolean afterCalc = false;
String currentOp = "";


public static void main(String args[]){
dentaku3 frame = new dentaku3("簡易電卓");
frame.setVisible(true);
}


dentaku3(String title){
setTitle(title);
setBounds(100, 100, 260, 240);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


JPanel p = new JPanel();

JPanel key = new JPanel();
key.setLayout(new GridLayout(5,1));

JPanel keisan = new JPanel();


p.add(result);

key.add(new NumberButton("7"),0);
key.add(new NumberButton("8"),1);
key.add(new NumberButton("9"),2);
key.add(new NumberButton("4"),3);
key.add(new NumberButton("5"),4);
key.add(new NumberButton("6"),5);
key.add(new NumberButton("1"),6);
key.add(new NumberButton("2"),7);
key.add(new NumberButton("3"),8);
key.add(new NumberButton("0"),9);
key.add(new NumberButton("."),10);
key.add(new CalcButton("+"),11);
key.add(new CalcButton("-"),12);
key.add(new CalcButton("*"),13);
key.add(new CalcButton("/"),14);



keisan.add(new ClearButton());
keisan.add(new CalcButton("結果"));


Container contentPane = getContentPane();

contentPane.add(p, BorderLayout.NORTH);
contentPane.add(key, BorderLayout.CENTER);
contentPane.add(keisan, BorderLayout.SOUTH);
}



public class NumberButton extends JButton implements ActionListener {

public NumberButton(String keyTop){
super(keyTop);
this.addActionListener(this);
}
public void actionPerformed(ActionEvent evt) {
String keyNumber = this.getText();
appendResult(keyNumber);
}
}


public void appendResult(String c) {
if( ! afterCalc )
result.setText(result.getText() + c);
else {
result.setText(c);
afterCalc =false;
}
}



public class ClearButton extends JButton implements ActionListener {

public ClearButton() {
super("C");
this.addActionListener(this);
}

public void actionPerformed(ActionEvent evt) {
result.setText("");
stackedValue = 0.0;
isStacked = false;
boolean afterCalc = false;
currentOp = "";
}
}


public class CalcButton extends JButton implements ActionListener{

public CalcButton(String op){
super(op);
this.addActionListener(this);
}

public void actionPerformed(ActionEvent e){
if(isStacked){
double resultValue = (Double.valueOf(result.getText())).doubleValue();
if ( currentOp.equals("+"))
stackedValue += resultValue;
else if( currentOp.equals("-"))
stackedValue -= resultValue;
else if( currentOp.equals("*"))
stackedValue *= resultValue;
else if( currentOp.equals("/"))
stackedValue /= resultValue;
result.setText(String.valueOf(stackedValue));
}

currentOp = this.getText();
stackedValue = (Double.valueOf(result.getText())).doubleValue();

afterCalc =true;

if( currentOp.equals("計算")){
isStacked = false;}
else
isStacked = true;
}
}
}





isStackedで値が格納されているかどうか判別し、
aftarCalcでCalc(演算)ボタンが押された後かどうかを判別しています。
この部分のプログラムが難しかったです。




以下は余談です。

当初図3のような電卓を作ろうとしましたが、上手くいきませんでした。
テキストフィールドが2つあるため、アクティブ(フォーカス)になっている方に、
数値ボタンを押して、数値入力されるように試みました。
アクティブ状態を検出・判別する為に、foucus =text1.hasFocus() や FoucusListenerを
使って見ましたが上手くいきませんでした。
理由は数値ボタンを押した時点で、フォーカスが数値ボタンに移ってしまうからのようです。
(結果、数値ボタンからは一方のテキストフィールドにしか数値入力できませんでした)


JAVA電卓画像3
            
      図3.失敗した電卓

スポンサーサイト

コメントの投稿

非公開コメント

承認待ちコメント

このコメントは管理者の承認待ちです

承認待ちコメント

このコメントは管理者の承認待ちです
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。