Java GUI グラフィカル インターフェイス開発で小さな電卓を実装する方法
1. 設計目標
(1) 主な機能:加算、減算、乗算、除算などの単純な両眼演算と、平方根や百分率などの単眼演算を実現します。 2) アクセシビリティ機能: ボタン「C」はテキスト ボックスのクリアを実現し、ボタン「←」はバックスペースを実現し、テキスト ボックスの右端の文字を削除します。
2. インターフェイス設計
Create" パネルObject」を選択し、そのレイアウト管理モードを、20 個のボタンを収容できる 5 行 4 列の GridLayout レイアウト モードに設定します。 20 個のボタン コンポーネントを収容するテキスト ボックスとパネルは、ボーダー レイアウト メソッドを使用して、それぞれフォーム BorderLayout.NORTH と中心位置 BorderLayout.CENTER にレイアウトします。
次に、20 個のボタンのテキスト コンテンツを設定します。宣言と作成 String 型の配列に 20 個のボタンのテキスト コンテンツを格納する JButton 型 (または Button 型) の配列を宣言して作成し、for ループを使用して 20 個のボタンにテキストを順番に追加します。
最初に最終的なインターフェイスの効果を見てみましょう:
3. 機能の実装
「デリゲート イベント処理モデル」の使用ユーザーの操作に応じたイベント処理用。今回使用する主なコンポーネントはボタンとテキストボックスなので、ActionEventクラスに分類され、ActionListenerイベントリスナーインターフェースを使用して、イベントに応答するactionPerformedメソッドを実装します。
計算関数の実装:二項演算子と単項演算子の処理の違いに注意してください。二項演算子は、第一オペランドの値と二項演算後の値を格納する変数を定義し、「=」をクリックするとテキストボックスに演算結果が表示されます。単項演算子は、値を入力した後、演算子をクリックすると、演算結果がテキスト ボックスに直接表示されます。平方根関数は、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(); } }
5. 機能テスト
Addition
減算
#乗算
#クリア
#
以上がJava GUI グラフィカル インターフェイス開発で小さな電卓を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Java の乱数ジェネレーターのガイド。ここでは、Java の関数について例を挙げて説明し、2 つの異なるジェネレーターについて例を挙げて説明します。

Java の Weka へのガイド。ここでは、weka java の概要、使い方、プラットフォームの種類、利点について例を交えて説明します。

この記事では、Java Spring の面接で最もよく聞かれる質問とその詳細な回答をまとめました。面接を突破できるように。

Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです

Java での日付までのタイムスタンプに関するガイド。ここでは、Java でタイムスタンプを日付に変換する方法とその概要について、例とともに説明します。
