واجهة هذه الآلة الحاسبة تحاكي الآلة الحاسبة البسيطة التي تأتي مع نظام التشغيل Windows، بما في ذلك الواجهة التفاعلية والاستجابات للمدخلات المختلفة. لم يتم تنفيذ وظائف شريط القائمة وأزرار الذاكرة بعد.
انسخ رمز الكود كما يلي:
import java.awt.Color;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.plaf.basic.BasicBorders;
حاسبة الفئة العامة تمتد JFrame {
serialVersionUID النهائي الطويل الخاص الثابت = 1L؛
الحاوية ج = getContentPane();
StringBuilder number1 = new StringBuilder("");// تخزين السلسلة الرقمية الأولى
StringBuilder number2 = new StringBuilder("");// تخزين السلسلة الرقمية الثانية
StringBuilder عامل = جديد StringBuilder("");// مشغل التخزين
نتيجة StringBuilder = new StringBuilder("");// نتيجة عملية التخزين
JTextField Numbershow = new JTextField("0.");// منطقة عرض الأرقام، العرض الأولي هو "0."
public static void main(String[] args) {// الطريقة الرئيسية
الحاسبة c1 = الحاسبة الجديدة();
c1.setVisible(true);
}
الحاسبة العامة () {// طريقة بناء الحاسبة
setTitle("الحاسبة");
setBounds(100, 100, 260, 245);
setResizable(false);
setLayout(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
createMenuBar();// إنشاء شريط القائمة
createNumberShow();// أنشئ منطقة عرض الأرقام
createMemoShow();// إنشاء عرض للذاكرة
createClearButtons();// أنشئ ثلاثة أزرار مثل Backspace وCE وC
createButtonArea();// إنشاء منطقة زر رقم
}
public void createMenuBar() {// طريقة إنشاء شريط القوائم
JMenuBar Menubar = new JMenuBar();
setJMenuBar(menubar);
JMenu Menu1 = new JMenu("تحرير");
JMenu Menu2 = new JMenu("View");
JMenu Menu3 = new JMenu("مساعدة");
Menubar.add(menu1);
Menubar.add(menu2);
Menubar.add(menu3);
JMenuItem Menu1item1 = new JMenuItem("نسخ");
JMenuItem Menu1item2 = new JMenuItem("لصق");
JMenuItem Menu2item1 = new JMenuItem("النوع القياسي");
JMenuItem Menu2item2 = new JMenuItem("Scientific");
JMenuItem Menu2item3 = new JMenuItem("التجميع العلمي");
JMenuItem Menu3item1 = new JMenuItem("موضوع المساعدة");
JMenuItem Menu3item2 = new JMenuItem("حول الحاسبة");
Menu1.add(menu1item1);
Menu1.add(menu1item2);
Menu2.add(menu2item1);
Menu2.add(menu2item2);
Menu2.add(menu2item3);
Menu3.add(menu3item1);
Menu3.add(menu3item2);
}
Private void createNumberShow() {// طريقة إنشاء منطقة عرض الأرقام
Numbershow.setHorizontalAlignment(JTextField.RIGHT);
Numbershow.setBounds(5, 0, 245, 22);
Numbershow.setEnabled(false);
Numbershow.setDisabledTextColor(Color.BLACK);
c.add(numbershow);
}
Private void createMemoShow() {// طريقة إنشاء عرض الذاكرة
JTextField memoshow = new JTextField();
memoshow.setEditable(false);
memoshow.setBounds(10, 30, 28, 22);
memoshow.setBorder(new BasicBorders.FieldBorder(Color.black,
اللون.أسود، اللون.أبيض، اللون.أبيض))؛
c.add(memoshow);
}
Private void createClearButtons() {// طريقة لإنشاء ثلاثة أزرار مثل Backspace وCE وC
JButton[] Clearbutton = new JButton[3];
String[] Clearbuttontext = { "Backspace"، "CE"، "C" };
لـ (int i = 0; i < 3; i++) {
Clearbutton[i] = new JButton();
Clearbutton[i].setText(clearbuttontext[i]);
Clearbutton[i].setHorizontalAlignment(SwingConstants.CENTER);
Clearbutton[i].setMargin(new Insets(0, 0, 0, 0));
Clearbutton[i].setFont(new java.awt.Font("Arial", 0, 9));
Clearbutton[i].setForeground(Color.blue);
Clearbutton[i].setBounds(48 + i * 68, 30, 63, 22);
Clearbutton[i].setForeground(Color.red);
c.add(clearbutton[i]);
}
Clearbutton[0].addActionListener(new ActionListener() {// أضف مستمعًا لزر Backspace
@تجاوز
إجراء باطل عام (ActionEvent e) {
إذا (number1.toString().equals("")) {// إذا لم يتم إجراء أي إدخال
showNumber(numbershow, number1);//show number1
} else if (operator.toString().equals("")) {// إذا تم إدخال الرقم 1 فقط
number1.deleteCharAt(number1.toString(). length() - 1); // إزالة الحرف الأخير من number1
showNumber(numbershow, number1);//show number1
} else if (number2.toString().equals("")) {// إذا تم إدخال الرقم 1 وعامل التشغيل فقط
showNumber(numbershow, number1);// لا توجد معالجة، عرض number1
} else {// إذا تم إدخال رقم 1، عامل التشغيل، رقم 2
number2.deleteCharAt(number2.toString(). length() - 1); // إزالة الحرف الأخير من number2
showNumber(numbershow, number2);//show number2
}
}
});
Clearbutton[1].addActionListener(new ActionListener() {// أضف مستمعًا لزر CE
@تجاوز
إجراء باطل عام (ActionEvent e) {
إذا (number1.toString().equals("")) {// إذا لم يتم إجراء أي إدخال
showNumber(numbershow, number1);//show number1
} else if (operator.toString().equals("")) {// إذا تم إدخال الرقم 1 فقط
number1.setLength(0);//امسح number1
showNumber(numbershow, number1);//show number1
} else if (number2.toString().equals("")) {// إذا تم إدخال الرقم 1 وعامل التشغيل
showNumber(numbershow, number2);// لا توجد معالجة، عرض number2
} else {// إذا تم إدخال رقم 1، عامل التشغيل، رقم 2
number2.setLength(0);//امسح number2
showNumber(numbershow, number2);//show number2
}
}
});
Clearbutton[2].addActionListener(new ActionListener() {// أضف مستمعًا للزر C
@تجاوز
public void actionPerformed(ActionEvent e) {// امسح كل مساحة التخزين
number1.setLength(0);
number2.setLength(0);
عامل التشغيل.setLength(0);
Numbershow.setText("0.");
result.setLength(0);
}
});
}
Private void createButtonArea() {// طريقة إنشاء منطقة الزر الرقمي
JPanel ButtonArea = new JPanel();
ButtonArea.setBounds(5, 55, 245, 125);
ButtonArea.setLayout(new GridLayout(4, 6, 5, 5));
c.add(ButtonArea);
JButton[] numberbutton = new JButton[24];
String[] numberbuttontext = { "MC"، "7"، "8"، "9"، "/"، "sqrt"، "MR"،
"4"، "5"، "6"، "*"، "%"، "MS"، "1"، "2"، "3"، "-"، "1/X"، "M+"،
"0"، "+/-"، "."، "+"، "= }؛
for (int i = 0; i < 24; i++) {// استخدم حلقة لإضافة تسميات إلى هذه الأزرار الـ 24
numberbutton[i] = new JButton(numberbuttontext[i]);
ButtonArea.add(numberbutton[i]);
إذا (i % 6 == 0 || i % 6 == 4 || i == 23) {// تم ضبط زر المشغل على اللون الأحمر
numberbutton[i].setHorizontalAlignment(SwingConstants.CENTER);
numberbutton[i].setMargin(new Insets(0, 0, 0, 0));
numberbutton[i].setFont(new java.awt.Font("Arial", 0, 9));
numberbutton[i].setForeground(Color.red);
} آخر {// الإعدادات الأخرى باللون الأزرق
numberbutton[i].setHorizontalAlignment(SwingConstants.CENTER);
numberbutton[i].setMargin(new Insets(0, 0, 0, 0));
numberbutton[i].setFont(new java.awt.Font("Arial", 0, 9));
numberbutton[i].setForeground(Color.blue);
}
}
int[] number = { 19, 13, 14, 15, 7, 8, 9, 1, 2, 3 };// تمثل الأرقام الموجودة في هذه المصفوفة على التوالي الأرقام التسلسلية للأرقام من 0 إلى 9 في مصفوفة numberbuttontext
for (int i = 0; i <= 9; i++) { // استخدم حلقة لإضافة مستمعين لأزرار الأرقام العشرة 0-9
السلسلة النهائية str = String.valueOf(i);
numberbutton[numbers[i]].addActionListener(new ActionListener() {// أضف مستمعين للأزرار 0-9
@تجاوز
إجراء باطل عام (ActionEvent e) {
إذا (operator.toString().equals("")) {// قبل إدخال عامل التشغيل
add(number1, str); // قم بتعيين قيمة number1 فقط
showNumber(numbershow, number1);// اعرض قيمة number1 فقط
} else {// بعد إدخال عامل التشغيل
add(number2, str);// قم بتعيين قيمة number2 فقط
showNumber(numbershow, number2);// اعرض قيمة number2 فقط
}
}
});
}
numberbutton[20].addActionListener(new ActionListener() { // أضف مستمعًا للزر "+/-"
@تجاوز
إجراء باطل عام (ActionEvent e) {
إذا (operator.toString().equals("")) {// قبل إدخال عامل التشغيل
add(number1, "+/-");// قم بتعيين قيمة number1 فقط
showNumber(numbershow, number1);// اعرض قيمة number1 فقط
} else {// بعد إدخال عامل التشغيل
add(number2, "+/-");// قم بتعيين قيمة number2 فقط
showNumber(numbershow, number2);// اعرض قيمة number2 فقط
}
}
});
numberbutton[21].addActionListener(new ActionListener() { // أضف مستمعًا للزر "."
@تجاوز
إجراء باطل عام (ActionEvent e) {
if (operator.toString().equals("")) {// قبل إدخال عامل التشغيل، يتم عرض قيمة number1 فقط
add(number1, ".");
showNumber(numbershow, number1);
} else {// بعد إدخال عامل التشغيل، يتم عرض قيمة number2 فقط
add(number2, ".");
showNumber(numbershow, number2);
}
}
});
numberbutton[22].addActionListener(new ActionListener() { // أضف مستمعًا للزر "+"
@تجاوز
إجراء باطل عام (ActionEvent e) {
عامل التشغيل.setLength(0);
عامل التشغيل("+");
}
});
numberbutton[16].addActionListener(new ActionListener() { // أضف مستمعًا للزر "-"
@تجاوز
إجراء باطل عام (ActionEvent e) {
عامل التشغيل.setLength(0);
عامل التشغيل("-");
}
});
numberbutton[10].addActionListener(new ActionListener() { // أضف مستمعًا للزر "*"
@تجاوز
إجراء باطل عام (ActionEvent e) {
عامل التشغيل.setLength(0);
عامل التشغيل("*");
}
});
numberbutton[4].addActionListener(new ActionListener() { // أضف مستمعًا للزر "/"
@تجاوز
إجراء باطل عام (ActionEvent e) {
عامل التشغيل.setLength(0);
عامل التشغيل("/");
}
});
numberbutton[23].addActionListener(new ActionListener() { // أضف مستمعًا للزر "="
@تجاوز
إجراء باطل عام (ActionEvent e) {
إذا (number1.toString().equals("")) {// عندما يكون الرقم 1 فارغًا
showNumber(numbershow, number1);
} else if (operator.toString().equals("")) {// عندما لا يكون الرقم 1 فارغًا ويكون عامل التشغيل فارغًا
showNumber(numbershow, number1);
} else if (number2.toString().equals("")) {// عندما لا يكون الرقم 1 والمشغل فارغين، ولكن الرقم 2 فارغ
التبديل (operator.toString()) {
الحالة ("+"): {
number2.append(number1.toString());
مزدوج د = Double.parseDouble(number1
.toString())
+ Double.parseDouble(number2.toString());
result.setLength(0);
result.append(d);
showNumber(numbershow, result);
number1.setLength(0);
number1.append(d);
}
استراحة؛
قضية ("-"): {
number2.append(number1.toString());
مزدوج د = Double.parseDouble(number1
.toString())
- Double.parseDouble(number2.toString());
result.setLength(0);
result.append(d);
showNumber(numbershow, result);
number1.setLength(0);
number1.append(d);
}
استراحة؛
قضية ("*"): {
number2.append(number1.toString());
مزدوج د = Double.parseDouble(number1
.toString())
* Double.parseDouble(number2.toString());
result.setLength(0);
result.append(d);
showNumber(numbershow, result);
number1.setLength(0);
number1.append(d);
}
استراحة؛
قضية ("/"): {
number2.append(number1.toString());
مزدوج د = Double.parseDouble(number1
.toString())
/ Double.parseDouble(number2.toString());
result.setLength(0);
result.append(d);
showNumber(numbershow, result);
number1.setLength(0);
number1.append(d);
}
استراحة؛
}
} else {// عندما لا يكون رقم 1، عامل التشغيل، رقم 2 فارغًا
التبديل (operator.toString()) {
الحالة ("+"): {
مزدوج د = Double.parseDouble(number1
.toString())
+ Double.parseDouble(number2.toString());
result.setLength(0);
result.append(d);
showNumber(numbershow, result);
number1.setLength(0);
number1.append(d);
}
استراحة؛
قضية ("-"): {
مزدوج د = Double.parseDouble(number1
.toString())
- Double.parseDouble(number2.toString());
result.setLength(0);
result.append(d);
showNumber(numbershow, result);
number1.setLength(0);
number1.append(d);
}
استراحة؛
قضية ("*"): {
مزدوج د = Double.parseDouble(number1
.toString())
* Double.parseDouble(number2.toString());
result.setLength(0);
result.append(d);
showNumber(numbershow, result);
number1.setLength(0);
number1.append(d);
}
استراحة؛
قضية ("/"): {
مزدوج د = Double.parseDouble(number1
.toString())
/ Double.parseDouble(number2.toString());
result.setLength(0);
result.append(d);
showNumber(numbershow, result);
number1.setLength(0);
number1.append(d);
}
استراحة؛
}
}
}
});
numberbutton[17].addActionListener(new ActionListener() { // أضف مستمعًا للزر "1/x"
@تجاوز
إجراء باطل عام (ActionEvent e) {
إذا (number1.toString().equals("")) {// عندما لا يتم إدخال الرقم 1
Numbershow.setText("لا يمكن أن يكون المقسوم عليه صفرًا");
} else if (operator.toString().equals("")) تم إدخال {//number1، ولكن لم يتم إدخال عامل التشغيل
إذا (Double.parseDouble(number1.toString()) == 0) {// إذا كانت قيمة number1 هي صفر
Numbershow.setText("لا يمكن أن يكون المقسوم عليه صفرًا");
} else {// إذا كانت قيمة number1 ليست صفراً
مزدوج د = 1 / (Double.parseDouble(number1
.toString()));
number1.setLength(0);
number1.append(d);// افتح وتخزين قيمة number1
showNumber(numbershow, number1);
}
} else if (number2.toString().equals("")) {// تم إدخال رقم 1 وعامل التشغيل، ولكن لم يتم إدخال رقم 2
مزدوج د = 1 / (Double.parseDouble(number1
.toString()));
number2.append(d);// افتح وتخزين قيمة number1
showNumber(numbershow, number2);
} آخر {// رقم الإدخال 1، عامل التشغيل، رقم 2
مزدوج د = 1 / (Double.parseDouble(number2
.toString()));
number2.setLength(0);
number2.append(d);// افتح وتخزين قيمة number2
showNumber(numbershow, number2);
}
}
});
numberbutton[11].addActionListener(new ActionListener() { // أضف مستمعًا للزر "%"
@تجاوز
إجراء باطل عام (ActionEvent e) {
// شاغرة مؤقتا
}
});
numberbutton[5].addActionListener(new ActionListener() { // أضف مستمعًا للزر "sqrt"
@تجاوز
إجراء باطل عام (ActionEvent e) {
إذا (number1.toString().equals("")) {// عندما لا يتم إدخال الرقم 1
showNumber(numbershow, number1);
} else if (operator.toString().equals("")) تم إدخال {//number1، ولكن لم يتم إدخال عامل التشغيل
إذا (Double.parseDouble(number1.toString()) < 0) {// number1 أقل من 0
Numbershow.setText("إدخال الوظيفة غير صالح");
} else {// number1 أكبر من 0
مزدوج د = Math.sqrt(Double.parseDouble(number1
.toString()));
number1.setLength(0);
number1.append(d);// افتح وتخزين قيمة number1
showNumber(numbershow, number1);
}
} else if (number2.toString().equals("")) {// تم إدخال رقم 1 وعامل التشغيل، ولكن لم يتم إدخال رقم 2
مزدوج د = Math.sqrt(Double.parseDouble(number1
.toString()));
number2.append(d);// افتح وتخزين قيمة number1
showNumber(numbershow, number2);
} آخر {// رقم الإدخال 1، عامل التشغيل، رقم 2
مزدوج د = Math.sqrt(Double.parseDouble(number2
.toString()));
number2.setLength(0);
number2.append(d);// افتح وتخزين قيمة number2
showNumber(numbershow, number2);
}
}
});
}
إضافة باطلة عامة (StringBuilder s1، String s2) {// تحديد طريقة تغيير السلسلة الرقمية بعد إدخال الزر
إذا (s2.equals("+/-")) {// حدد تغيير السلسلة الرقمية بعد إدخال "+/-"
if (s1.toString().equals("") || s1.toString().equals("0")) {// إذا كانت السلسلة الرقمية فارغة أو 0، فلن يحدث أي تغيير
s1.append("");
} else {// إذا لم تكن السلسلة الرقمية فارغة أو 0، أضف أو احذف الحرف "-" قبل السلسلة الرقمية
إذا (s1.toString().startsWith("-")) {
s1.deleteCharAt(0);
} آخر {
s1.insert(0, "-");
}
}
}
إذا (s2.equals(".")) {// حدد تغيير السلسلة الرقمية بعد إدخال "."
if (s1.toString().indexOf(".") == -1) {// اكتشف ما إذا كانت السلسلة الرقمية تحتوي على الحرف "."
if (s1.toString().equals("")) {// إذا كانت السلسلة الرقمية فارغة، فاضبط السلسلة الرقمية على "0."
s1.setLength(0);
s1.append("0.");
} آخر {
s1.append(".");
}
} else {// إذا كان هناك، فلن يحدث أي تغيير
s1.append("");
}
}
إذا (s2.equals("0")) {// حدد تغيير السلسلة الرقمية بعد إدخال "0"
إذا (s1.toString().equals("0")) {// عندما تكون السلسلة الرقمية هي "0"، لا يحدث أي تغيير
s1.append("");
} else {// عندما تكون السلسلة الرقمية "0"، أضف "0" بعد السلسلة
s1.append("0");
}
}
for (int i = 1; i < 10; i++) {// من خلال الحلقة، حدد التغييرات في السلسلة الرقمية بعد إدخال 1-9
String str = String.valueOf(i);
إذا (s2.equals(str)) {// حدد تغيير السلسلة الرقمية بعد إدخال 1-9
إذا (s1.toString().equals("0")) {
s1.setLength(0);
s1.append(str);
} آخر
s1.append(str);
}
}
}
public void showNumber(JTextField j, StringBuilder s) {// طريقة لتحديد كيفية عرض السلاسل الرقمية في منطقة عرض الأرقام
إذا (s.toString().equals("") == صحيح || s.toString().equals("0") == صحيح) {
j.setText("0.");
} else if (s.toString().indexOf(".") == -1) {
j.setText(s.toString() + ".");
} آخر {
j.setText(s.toString());
}
}
}