(1) 主な機能:加算、減算、乗算、除算などの単純な両眼演算と、平方根や百分率などの単眼演算を実現します。 2) アクセシビリティ機能: ボタン「C」はテキスト ボックスのクリアを実現し、ボタン「←」はバックスペースを実現し、テキスト ボックスの右端の文字を削除します。
2. インターフェイス設計
次に、20 個のボタンのテキスト コンテンツを設定します。宣言と作成 String 型の配列に 20 個のボタンのテキスト コンテンツを格納する JButton 型 (または Button 型) の配列を宣言して作成し、for ループを使用して 20 個のボタンにテキストを順番に追加します。
最初に最終的なインターフェイスの効果を見てみましょう:
3. 機能の実装
計算関数の実装:二項演算子と単項演算子の処理の違いに注意してください。二項演算子は、第一オペランドの値と二項演算後の値を格納する変数を定義し、「=」をクリックするとテキストボックスに演算結果が表示されます。単項演算子は、値を入力した後、演算子をクリックすると、演算結果がテキスト ボックスに直接表示されます。平方根関数は、Math クラスの sqrt() メソッドを呼び出すことで実装されます。たとえば、12%=12*0.01 0.12 のように、計算を実装するメソッドが特別に定義されているため、パーセント演算に 0.01 を直接乗算できます。
public void calculate(){ char[]arr=input.getText().toCharArray();//将输入的计算表达式字符串存储在字符数组中便于查找运算符的位置 int i=0;//移动标志变量 while('0'<=arr[i]&&arr[i]<='9'||arr[i]=='.')//去除数字与小数点以确定双目运算符的位置 i++; char operator=arr[i];//将该运算符存储起来 //双目运算 if(operator!='%'&&operator!='√'){ String s=input.getText(),s1,s2;//s1,s2分别存储运算符前后的数值字符串 s1=s.substring(0,i); s2=s.substring(i+1,s.length()); Double left=Double.parseDouble(s1);//将运算符左边的数值字符串转换为浮点数 Double right=Double.parseDouble(s2);//将运算符右边的数值字符串转换为浮点数 //根据不同的运算符进行相应的计算 if(operator=='+')result=left+right; else if(operator=='-')result=left-right; else if(operator=='×')result=left*right; else if(operator=='÷')result=left/right; } //单目运算 else{ String s=input.getText(),s1; s1=s.substring(0,s.length()-1); Double a=Double.parseDouble(s1); if(operator=='%'){ result=0.01*a; } else if(operator=='√'){ result=Math.sqrt(a); } } }
コードのアイデア: 演算式 8 5 を例に挙げます。まずユーザーがボタンコンポーネントを通じて入力した計算式文字列「8 5」をテキストボックス入力から取得し、それを文字配列に変換し、二項演算の場合はループを通じて演算子の位置を求め、次に、StringTokenizer クラスを使用します。文字列内の文字の分割および編集メソッド substring(a,b) は、添え字が a で始まり b-1 で終わる文字列 (左閉および右開区間) を取得し、演算子を使用します。 2 つを区切る境界線として使用します。 数字が分離されます。つまり、2 つの文字「8」と「5」がそれぞれ取得され、Double.parseDouble() メソッドを使用してそれらが浮動小数点数に変換されます。 8.0最後に、さまざまな演算子に従って、対応する計算を実行し、結果を変数 result に保存します。単項演算子は、分割後に左側のオペランドが 1 つだけあり、右側のオペランドが存在しない点を除いて同じです。
テキスト ボックスをクリアするボタン "C" の実装: テキスト ボックス オブジェクトのメンバー メソッド setText("") を呼び出し、空の文字列にリセットします。
Button "←" exit グリッドの実装: 最初にテキスト ボックス内の文字列を取得し、次にメンバー メソッド substring() を呼び出して最後の文字を削除した後の残りの部分文字列を取得し、最後にその文字列をテキスト ボックス オブジェクトのコンテンツとして設定します。コードの一部は次のとおりです。
String str=input.getText(); if(str.length()>1){ str=str.substring(0,str.length()-1); input.setText(str); } else{ input.setText(""); }
4. すべてのコード
import java.awt.*; import javax.swing.*; import java.awt.event.*; import java.util.StringTokenizer; public class Calculator extends JFrame implements ActionListener{ JTextField input;//文本框,显示计算结果 JButton []button=new JButton[20];//按钮数组,存放20个按钮组件 JPanel pan=new JPanel(); String name[]={"C","÷", "×", "←","7", "8", "9", "-", "4", "5", "6", "+", "1", "2", "3", "√", "%", "0", ".", "="};//按钮标签数组 double result;//存储双目运算的结果 public Calculator(){ setTitle("模拟计算器—江海大"); pan.setLayout(new GridLayout(5,4));//设置面板pan的布局格式为5行4列的网格布局,存放20个按钮 input=new JTextField(20); input.setText(""); input.setFont(new Font("宋体",Font.BOLD,18)); input.setForeground(Color.BLUE); for(int i=0;i<button.length;i++){ button[i]=new JButton(name[i]); button[i].setFont(new Font("黑体",Font.BOLD,20)); button[i].addActionListener(this);//给每一个按钮注册事件监听器 pan.add(button[i]); } add(input,BorderLayout.NORTH); add(pan,BorderLayout.CENTER); setSize(600,400); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗体 } //动作响应 public void actionPerformed(ActionEvent e){ //如果点击按钮 "C"则触发清空文本框的操作 if(e.getSource()==button[0]){ input.setText(""); } //如果点击按钮"="则调用计算方法并在文本框显示结果 else if(e.getSource()==button[19]){ calculate(); input.setText(""+result);//输出计算结果 } //如果点击"<--"按钮则删去文本框内字符串的末尾字符 else if(e.getSource()==button[3]){ String str=input.getText(); if(str.length()>1){ str=str.substring(0,str.length()-1); input.setText(str); } else{ input.setText(""); } } //以字符串拼接的方式将点击的按钮的标签拼接起来,成为一个运算表达式字符串 else{ input.setText(input.getText()+e.getActionCommand()); } } public void calculate(){ char[]arr=input.getText().toCharArray();//将输入的计算表达式字符串存储在字符数组中便于查找运算符的位置 int i=0;//移动标志变量 while('0'<=arr[i]&&arr[i]<='9'||arr[i]=='.')//去除数字与小数点以确定双目运算符的位置 i++; char operator=arr[i];//将该运算符存储起来 //双目运算 if(operator!='%'&&operator!='√'){ String s=input.getText(),s1,s2;//s1,s2分别存储运算符前后的数值字符串 s1=s.substring(0,i); s2=s.substring(i+1,s.length()); Double left=Double.parseDouble(s1);//将运算符左边的数值字符串转换为浮点数 Double right=Double.parseDouble(s2);//将运算符右边的数值字符串转换为浮点数 //根据不同的运算符进行相应的计算 if(operator=='+')result=left+right; else if(operator=='-')result=left-right; else if(operator=='×')result=left*right; else if(operator=='÷')result=left/right; } //单目运算 else{ String s=input.getText(),s1; s1=s.substring(0,s.length()-1); Double a=Double.parseDouble(s1); if(operator=='%'){ result=0.01*a; } else if(operator=='√'){ result=Math.sqrt(a); } } } public static void main(String[]args){ new Calculator(); } }
Addition
減算
#乗算
#除算 #平方根#クリア
#
以上がJava GUI グラフィカル インターフェイス開発で小さな電卓を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。