(1) Fungsi utama: merealisasikan operasi teropong mudah seperti tambah, tolak, darab dan bahagi, dan operasi bermata seperti punca kuasa dua dan peratusan
( 2 ) Fungsi kebolehaksesan: Butang "C" menyedari mengosongkan kotak teks; butang "←" merealisasikan ruang belakang dan memadam aksara paling kanan dalam kotak teks
Buat " Objek Panel " dan tetapkan mod pengurusan reka letaknya kepada mod susun atur GridLayout sebanyak 5 baris dan 4 lajur untuk memuatkan 20 butang. Kotak teks dan panel yang memuatkan 20 komponen butang menggunakan kaedah susun atur sempadan untuk susun aturnya ke bentuk BorderLayout.NORTH dan kedudukan tengah BorderLayout.CENTER masing-masing
Kemudian tetapkan kandungan teks 20 butang: isytihar dan cipta Tatasusunan jenis String menyimpan kandungan teks pada 20 butang Isytihar dan cipta tatasusunan jenis JButton (atau jenis Butang), dan gunakan gelung for untuk menambah teks pada 20 butang dalam urutan.
Mari kita lihat kesan antara muka akhir dahulu:
Gunakan "model pemprosesan acara yang diwakilkan". untuk pemprosesan acara , sebagai tindak balas kepada operasi pengguna. Komponen utama yang digunakan kali ini ialah butang dan kotak teks, jadi ia boleh dikelaskan sebagai kelas ActionEvent Gunakan antara muka pendengar acara ActionListener untuk melaksanakan kaedah actionPerformed untuk bertindak balas kepada acara.
Pelaksanaan fungsi pengiraan: Beri perhatian kepada pemprosesan berbeza pengendali binari dan pengendali unari. Operator binari mentakrifkan pembolehubah untuk menyimpan nilai operan pertama dan nilai selepas operasi binari Hasil operasi dipaparkan dalam kotak teks dengan mengklik "=". Operator unary, selepas memasukkan nilai, klik operator untuk memaparkan hasil operasi terus dalam kotak teks. Fungsi punca kuasa dua dilaksanakan dengan memanggil kaedah sqrt() kelas Matematik Operasi peratusan boleh didarab terus dengan 0.01, kerana sebagai contoh, 12%=12*0.01+0.12, kaedah untuk melaksanakan pengiraan ditakrifkan khas. untuk tujuan ini. Sebahagian daripada kod adalah seperti berikut:
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); } } }
Mula-mula dapatkan rentetan ungkapan pengiraan "8+5" input oleh pengguna melalui komponen butang daripada input kotak teks, mula-mula tukarkannya menjadi tatasusunan aksara, jika ia adalah operasi binari, mula-mula cari kedudukan operator melalui gelung , dan kemudian gunakan StringTokenizer Pembahagian aksara dan kaedah penyuntingan subrentetan(a,b) dalam kelas memperoleh rentetan yang subskripnya bermula daripada a dan berakhir dengan b-1 (selang kiri-tutup dan kanan-buka), dan menggunakan operator sebagai garis pemisah untuk memisahkan dua aksara Dua aksara angka dipisahkan, iaitu dua aksara '8' dan '5' masing-masing diperoleh, dan kemudian kaedah Double.parseDouble() digunakan untuk mengubahnya menjadi titik terapung. nombor 8.0 dan 5.0 yang boleh dikendalikan Akhirnya, mengikut operasi yang berbeza Operator melakukan pengiraan yang sepadan dan menyimpan hasilnya dalam hasil pembolehubah. Operator unary adalah sama, kecuali selepas pemisahan, hanya terdapat satu operan kiri dan tiada operan kanan.
Pelaksanaan butang "C" untuk mengosongkan kotak teks: panggil kaedah ahli setText("") objek kotak teks dan tetapkan semula kepada rentetan kosong
Butang "← " keluar Pelaksanaan grid: mula-mula dapatkan rentetan dalam kotak teks, kemudian panggil subrentetan kaedah ahli() untuk mendapatkan subrentetan yang tinggal selepas mengalih keluar aksara terakhir, dan akhirnya tetapkan rentetan sebagai kandungan objek kotak teks. Sebahagian daripada kod adalah seperti berikut:
String str=input.getText(); if(str.length()>1){ str=str.substring(0,str.length()-1); input.setText(str); } else{ input.setText(""); }
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(); } }
Tambahan
Penolakan
Pendaraban
Pembahagian
Akar kuasa dua
Jelas
Atas ialah kandungan terperinci Bagaimana untuk melaksanakan kalkulator kecil dalam pembangunan antara muka grafik Java GUI. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!