- 締切済み
Javaで電卓を作りたい
Javaで電卓を作りたいと思っています。 Javaエンジニアの方で 電卓アプリケーションならこのソースがスゴイ!というような 為になるというサイトがあれば教えて頂きたいです。 それとJavaの表記はJavaで正しいのですか?JAVAではないのですか? この2点、よろしくお願いします。 Javaのソースライブラリで有名なサイトはどこですか? 他の人のソースを見て勉強したいのでお勧めサイトを教えてください。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- zozy
- ベストアンサー率60% (20/33)
前回のソースは問題のあるものだったので修正後のソースを貼っておきます。申し訳ないです。。。 import java.applet.Applet; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; public class Calculator extends Applet implements MouseListener{ //ボタンの文字 String[][] strBtn={{" 7"," 8"," 9"," ÷","CE"}, {" 4"," 5"," 6"," ×","AC"}, {" 1"," 2"," 3"," -","→"}, {" 0"," 00"," . "," +","="}}; //プッシュした演算子 char operator; //どのボタンを押したかをあらわすフラグ boolean[][] push=new boolean[5][5]; //演算子をおしたか,"."をおしたか,"="をおしたか boolean operatorFlag,smallNumFlag,equalFlag; //ボタンのx座標 int[][] x=new int[4][5]; //ボタンのy座標 int[][] y=new int[4][5]; //計算結果 double result; //演算子入力前に入力したもの,演算子入力後に入力したもの,電卓に表示されてる文字列 String input1="",input2="",output=""; StringBuffer sb; public void init(){ setSize(250,250); addMouseListener(this); setBackground(new Color(0,0,0)); setFont(new Font("MS UI Gothic",Font.PLAIN,30)); } public void paint(Graphics g){ g.setColor(new Color(255,255,255)); g.fillRect(5,5,240,40); for(int i=0;i<4;i++){ for(int j=0;j<5;j++){ //ボタンが押されてる間はボタンの色が黄色に変化 if(push[i][j]==false)g.setColor(new Color(0,0,255,128)); else g.setColor(new Color(255,255,0,128)); x[i][j]=j*50+5; y[i][j]=i*50+55; g.fillRect(x[i][j],y[i][j],40,40); g.setColor(new Color(255,0,0)); g.drawString(strBtn[i][j],j*50+5,i*50+83); g.drawString(output,245-output.length()*15,28); } } } //数字ボタンを押した際に文字列を追加するためのメソッド public void addString(String str,String addStr){ sb=new StringBuffer(str); if(str.equals(input1)){input1=sb.append(addStr).toString();} if(str.equals(input2)){input2=sb.append(addStr).toString();} } //演算子ボタンを押した際の処理を書いたメソッド public void setOperator(char operator){ this.operator=operator; operatorFlag=true; output=""; input2=""; } //計算結果を最適な形に変換します public void suitable(){ if(result==(int)result)output=String.valueOf((int)result); else output=String.valueOf(result); sb=new StringBuffer(output); if(output.length()>15)output=sb.delete(15,output.length()).toString(); } public void mouseClicked(MouseEvent e){} public void mousePressed(MouseEvent e){ for(int i=0;i<4;i++){ for(int j=0;j<5;j++){ //クリックした時点のボタンへの当たり判定 if(e.getX()>x[i][j]&&e.getX()<x[i][j]+40&&e.getY()>y[i][j]&&e.getY()<y[i][j]+40){ push[i][j]=true; if(operatorFlag==false&&output.length()<15){ if(equalFlag==false){ if(i==0&&j==0)addString(input1,"7"); if(i==0&&j==1)addString(input1,"8"); if(i==0&&j==2)addString(input1,"9"); if(i==1&&j==0)addString(input1,"4"); if(i==1&&j==1)addString(input1,"5"); if(i==1&&j==2)addString(input1,"6"); if(i==2&&j==0)addString(input1,"1"); if(i==2&&j==1)addString(input1,"2"); if(i==2&&j==2)addString(input1,"3"); if(i==3&&j==0)addString(input1,"0"); if(i==3&&j==1)addString(input1,"00"); if(i==3&&j==2&&smallNumFlag==false){ addString(input1,"."); smallNumFlag=true; } } output=input1; if(i==0&&j==3)setOperator('/'); if(i==1&&j==3)setOperator('*'); if(i==2&&j==3)setOperator('-'); if(i==3&&j==3)setOperator('+'); if(i==0&&j==4){ input1=""; output=""; smallNumFlag=false; } if(i==1&&j==4){ input1=""; input2=""; output=""; operatorFlag=false; equalFlag=false; smallNumFlag=false; } if(i==2&&j==4){ if(input1.length()>0){ sb=new StringBuffer(input1); input1=sb.deleteCharAt(input1.length()-1).toString(); output=input1; } } }else if(operatorFlag==true&&output.length()<15){ smallNumFlag=false; if(i==0&&j==0)addString(input2,"7"); if(i==0&&j==1)addString(input2,"8"); if(i==0&&j==2)addString(input2,"9"); if(i==1&&j==0)addString(input2,"4"); if(i==1&&j==1)addString(input2,"5"); if(i==1&&j==2)addString(input2,"6"); if(i==2&&j==0)addString(input2,"1"); if(i==2&&j==1)addString(input2,"2"); if(i==2&&j==2)addString(input2,"3"); if(i==3&&j==0)addString(input2,"0"); if(i==3&&j==1)addString(input2,"00"); if(i==3&&j==2&&smallNumFlag==false){ addString(input2,"."); smallNumFlag=true; } output=input2; if(i==0&&j==4){ input2=""; output=""; smallNumFlag=false; } if(i==1&&j==4){ input1=""; input2=""; output=""; operatorFlag=false; equalFlag=false; smallNumFlag=false; } if(i==2&&j==4){ if(input2.length()>0){ sb=new StringBuffer(input2); input2=sb.deleteCharAt(input2.length()-1).toString(); output=input2; } } if(i==3&&j==4){ switch(operator){ case '/': result=Double.parseDouble(input1)/Double.parseDouble(input2); suitable(); break; case '*': result=Double.parseDouble(input1)*Double.parseDouble(input2); suitable(); break; case '-': result=Double.parseDouble(input1)-Double.parseDouble(input2); suitable(); break; case '+': result=Double.parseDouble(input1)+Double.parseDouble(input2); suitable(); break; } operatorFlag=false; input1=output; equalFlag=true; } } } } } repaint(); } public void mouseReleased(MouseEvent e){ //マウスのボタンを離したらボタンの色を青に戻す for(int i=0;i<4;i++){ for(int j=0;j<5;j++){ push[i][j]=false; } } repaint(); } public void mouseEntered(MouseEvent e){} public void mouseExited(MouseEvent e){} }
- zozy
- ベストアンサー率60% (20/33)
コンポーネントを一切使用しない電卓を作ってみました 自作で下手なソースではありますが、参考にしてもらえれば幸いです import java.applet.Applet; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; public class Calculator extends Applet implements MouseListener{ //ボタンの文字 String[][] strBtn={{" 7"," 8"," 9"," ÷","CE"}, {" 4"," 5"," 6"," ×","AC"}, {" 1"," 2"," 3"," -","√"}, {" 0"," 00"," . "," +","="}}; //プッシュした演算子 char operator; //どのボタンを押したかをあらわすフラグ boolean[][] push=new boolean[5][5]; //演算子をおしたか,"."をおしたか,"="をおしたか boolean operatorFlag,smallNumFlag,equalFlag; //ボタンのx座標 int[][] x=new int[4][5]; //ボタンのy座標 int[][] y=new int[4][5]; //計算結果 double result; //演算子入力前に入力したもの,演算子入力後に入力したもの,電卓に表示されてる文字列 String input1="",input2="",output=""; StringBuffer sb; public void init(){ setSize(250,250); addMouseListener(this); setBackground(new Color(0,0,0)); setFont(new Font("MS UI Gothic",Font.PLAIN,30)); } public void paint(Graphics g){ g.setColor(new Color(255,255,255)); g.fillRect(5,5,240,40); for(int i=0;i<4;i++){ for(int j=0;j<5;j++){ //ボタンが押されてる間はボタンの色が黄色に変化 if(push[i][j]==false)g.setColor(new Color(0,0,255,128)); else g.setColor(new Color(255,255,0,128)); x[i][j]=j*50+5; y[i][j]=i*50+55; g.fillRect(x[i][j],y[i][j],40,40); g.setColor(new Color(255,0,0)); g.drawString(strBtn[i][j],j*50+5,i*50+83); g.drawString(output,245-output.length()*15,28); } } } public void mouseClicked(MouseEvent e){} public void mousePressed(MouseEvent e){ for(int i=0;i<4;i++){ for(int j=0;j<5;j++){ //クリックした時点のボタンへの当たり判定 if(e.getX()>x[i][j]&&e.getX()<x[i][j]+40&&e.getY()>y[i][j]&&e.getY()<y[i][j]+40){ push[i][j]=true; if(operatorFlag==false&&output.length()<15){ if(equalFlag==false){ if(i==0&&j==0){ sb=new StringBuffer(input1); input1=sb.append("7").toString(); } if(i==0&&j==1){ sb=new StringBuffer(input1); input1=sb.append("8").toString(); } if(i==0&&j==2){ sb=new StringBuffer(input1); input1=sb.append("9").toString(); } if(i==1&&j==0){ sb=new StringBuffer(input1); input1=sb.append("4").toString(); } if(i==1&&j==1){ sb=new StringBuffer(input1); input1=sb.append("5").toString(); } if(i==1&&j==2){ sb=new StringBuffer(input1); input1=sb.append("6").toString(); } if(i==2&&j==0){ sb=new StringBuffer(input1); input1=sb.append("1").toString(); } if(i==2&&j==1){ sb=new StringBuffer(input1); input1=sb.append("2").toString(); } if(i==2&&j==2){ sb=new StringBuffer(input1); input1=sb.append("3").toString(); } if(i==3&&j==0){ sb=new StringBuffer(input1); input1=sb.append("0").toString(); } if(i==3&&j==1){ sb=new StringBuffer(input1); input1=sb.append("00").toString(); } if(i==3&&j==2&&smallNumFlag==false){ sb=new StringBuffer(input1); input1=sb.append(".").toString(); smallNumFlag=true; } } output=input1; if(i==0&&j==3){ operator='/'; operatorFlag=true; output=""; input2=""; } if(i==1&&j==3){ operator='*'; operatorFlag=true; output=""; input2=""; } if(i==2&&j==3){ operator='-'; operatorFlag=true; output=""; input2=""; } if(i==3&&j==3){ operator='+'; operatorFlag=true; output=""; input2=""; } if(i==0&&j==4){ input1=""; output=""; smallNumFlag=false; } if(i==1&&j==4){ input1=""; input2=""; output=""; operatorFlag=false; equalFlag=false; smallNumFlag=false; } if(i==2&&j==4){ input1=String.valueOf(Math.sqrt(Double.parseDouble(input1))); sb=new StringBuffer(input1); if(input1.length()>16)input1=sb.delete(15,input1.length()).toString(); if(Double.parseDouble(input1)==(int)Double.parseDouble(input1)){ output=String.valueOf((int)Double.parseDouble(input1)); } } }else if(operatorFlag==true&&output.length()<15){ smallNumFlag=false; if(i==0&&j==0){ sb=new StringBuffer(input2); input2=sb.append("7").toString(); } if(i==0&&j==1){ sb=new StringBuffer(input2); input2=sb.append("8").toString(); } if(i==0&&j==2){ sb=new StringBuffer(input2); input2=sb.append("9").toString(); } if(i==1&&j==0){ sb=new StringBuffer(input2); input2=sb.append("4").toString(); } if(i==1&&j==1){ sb=new StringBuffer(input2); input2=sb.append("5").toString(); } if(i==1&&j==2){ sb=new StringBuffer(input2); input2=sb.append("6").toString(); } if(i==2&&j==0){ sb=new StringBuffer(input2); input2=sb.append("1").toString(); } if(i==2&&j==1){ sb=new StringBuffer(input2); input2=sb.append("2").toString(); } if(i==2&&j==2){ sb=new StringBuffer(input2); input2=sb.append("3").toString(); } if(i==3&&j==0){ sb=new StringBuffer(input2); input2=sb.append("0").toString(); } if(i==3&&j==1){ sb=new StringBuffer(input2); input2=sb.append("00").toString(); } if(i==3&&j==2&&smallNumFlag==false){ sb=new StringBuffer(input2); input2=sb.append(".").toString(); smallNumFlag=true; } output=input2; if(i==0&&j==4){ input2=""; output=""; smallNumFlag=false; } if(i==1&&j==4){ input1=""; input2=""; output=""; operatorFlag=false; equalFlag=false; smallNumFlag=false; } if(i==2&&j==4){ input2=String.valueOf(Math.sqrt(Double.parseDouble(input2))); sb=new StringBuffer(input2); if(input1.length()>15)input2=sb.delete(15,input2.length()).toString(); if(Double.parseDouble(input2)==(int)Double.parseDouble(input2)){ output=String.valueOf((int)Double.parseDouble(input2)); } } if(i==3&&j==4){ switch(operator){ case '/': result=Double.parseDouble(input1)/Double.parseDouble(input2); if(result==(int)result)output=String.valueOf((int)result); else output=String.valueOf(result); sb=new StringBuffer(output); if(output.length()>15)output=sb.delete(15,output.length()).toString(); break; case '*': result=Double.parseDouble(input1)*Double.parseDouble(input2); if(result==(int)result)output=String.valueOf((int)result); else output=String.valueOf(result); sb=new StringBuffer(output); if(output.length()>15)output=sb.delete(15,output.length()).toString(); break; case '-': result=Double.parseDouble(input1)-Double.parseDouble(input2); if(result==(int)result)output=String.valueOf((int)result); else output=String.valueOf(result); sb=new StringBuffer(output); if(output.length()>15)output=sb.delete(15,output.length()).toString(); break; case '+': result=Double.parseDouble(input1)+Double.parseDouble(input2); if(result==(int)result)output=String.valueOf((int)result); else output=String.valueOf(result); sb=new StringBuffer(output); if(output.length()>15)output=sb.delete(15,output.length()).toString(); break; } operatorFlag=false; input1=output; equalFlag=true; } } } } } repaint(); } public void mouseReleased(MouseEvent e){ //マウスのボタンを離したらボタンの色を青に戻す for(int i=0;i<4;i++){ for(int j=0;j<5;j++){ push[i][j]=false; } } repaint(); } public void mouseEntered(MouseEvent e){} public void mouseExited(MouseEvent e){} }
お礼
ありがとうございます!!