الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مشكلة بالبرنامج أرجو المساعدة ولكم الدعاء

مغلق
بدأه آفاق في 16 نوفمبر 2006 · 6 رد · 717 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

هذا البرنامج يعمل كالآله الحاسبة باستعمال GUI

-المشكلة بسيطة لا يخوفكم كثرة الأسطر بس ساعدوني-

import javax.swing.*;
   import java.awt.*;
   import java.awt.event.*;
   import java.io.*;

	public class Calculator extends JFrame implements ActionListener
   {
	  private JTextField displayText = new JTextField(30);
	  private JButton[] button = new JButton[16];
	  private JButton memoryB , returnB , exitB; 


	  private String[] keys = {"7", "8", "9", "/",
							"4", "5", "6", "*",
							"1", "2", "3", "-",
							"0", "C", "=", "+"};

	  private String numStr1 = "";
	  private String numStr2 = "";
	  private String menory = "";

	  private char op;
	  private boolean firstInput = true;

	   public Calculator()
	  {
		 setTitle("My Calculator");
		 setSize(230, 230);
		 Container pane = getContentPane();

		 pane.setLayout(null);

		 displayText.setSize(200, 30);
		 displayText.setLocation(10, 10);
		 pane.add(displayText);

		 int x, y;

		 x = 10;
		 y = 40;
		 for (int ind = 0; ind < 16; ind++)
		 {
			button[ind] = new JButton(keys[ind]);
			button[ind].addActionListener(this);
			button[ind].setSize(50, 30);
			button[ind].setLocation(x, y);
			pane.add(button[ind]);
			x = x + 50;
			if((ind + 1) % 4 == 0)
			{
			   x = 10;
			   y = y + 30;
			}
		 }

		 memoryB =  new JButton("M");
		 returnB =  new JButton("R");
		 exitB =  new JButton("E");

			memoryB.addActionListener(this);
		 memoryB.setSize(50, 30);
		 memoryB.setLocation( 10 , y);
		 pane.add(memoryB);

		 returnB.setSize(50, 30);
		 returnB.setLocation( x + 50,  y );
		 pane.add(returnB); 

		 exitB.setSize(50, 30);
		 exitB.setLocation( x + 100,  y );
		 pane.add(exitB);

		 this.addWindowListener(
				new WindowAdapter()
			   {
				   public void windowClosing(WindowEvent e)
				  {
					 System.exit(0);
				  }
			   }
			);
		 this.addWindowListener(
				new WindowAdapter()
			   {
				   public void windowClosing(WindowEvent e)
				  {
					 System.exit(0);
				  }
			   }
			);


		 setVisible(true);
		 setDefaultCloseOperation(EXIT_ON_CLOSE);
	  }

	   public void actionPerformed(ActionEvent e)
	  {
		 String resultStr;								   //Step 1
		 String str = String.valueOf(e.getActionCommand());  //Steps 1 and 2

		 char ch = str.charAt(0);							//Steps 1 and 3

		 switch (ch)										  //Step 4
		 {
			case '0': case '1': case '2':					   //Step 4a
			case '3': case '4': case '5':
			case '6': case '7': case '8':
			case '9': 
			   if (firstInput)
			   {
				  numStr1 = numStr1 + ch;
				  displayText.setText(numStr1);
			   }
			   else
			   {
				  numStr2 = numStr2 + ch;
				  displayText.setText(numStr2);
			   }
			   break;
			case '+': case '-': case '*':					   //Step 4b
			case '/': op = ch;
			   firstInput = false;
			   break;
			case '=': resultStr = evaluate();				   //Step 4c
			   displayText.setText(resultStr);
			   numStr1 = resultStr;
			   numStr2 = "";
			   firstInput = false;
			   break;
			case 'C': displayText.setText("");				  //Step 4c
			   numStr1 = "";
			   numStr2 = "";
			   firstInput = true;
		 }
	  }

	   private String evaluate()
	  {
		 final char beep = '\u0007';

		 try
		 {
			int num1 = Integer.parseInt(numStr1);
			int num2 = Integer.parseInt(numStr2);
			int result = 0;

			switch (op)
			{
			   case '+': result = num1 + num2;
				  break;
			   case '-': result = num1 - num2;
				  break;
			   case '*': result = num1 * num2;
				  break;
			   case '/': result = num1 / num2;
			}

			return String.valueOf(result);
		 }
			 catch(ArithmeticException e)
			{
			   System.out.print(beep);
			   return "E R R O R: " + e.getMessage();
			}
			 catch(NumberFormatException e)
			{
			   System.out.print(beep);
			   if (numStr1.equals(""))
				  return "E R R O R: Invalid First Number";
			   else
				  return "E R R O R: Invalid Second Number";
			}
			 catch(Exception e)
			{
			   System.out.print(beep);
			   return "E R R O R";
			}
	  }

	   public static void main(String[] args)
	  {
		 Calculator C = new Calculator();
	  }
   }

أريد التعديل عليه بإضاففة أزرار جديده

وهي :

1- زر الذاكرة memory لحفظ الرقم المدخل بمكان بالذاكرة

2- زر استرجاع للقيمة السابقة return

3- زر الخروج وايقاف البرنامج exit

لكن المشكلة في استعمال

method actionListener

لأنه يختلف عمل الأزرار الإضافية عن السابقة

فكيف ذلك ؟ هل استعمل

class

WindowListener

or

mouseListener

وأي المثود منها سوف استخدم مع توضيح الطريقة

ساعدوني ولكم الدعاء

فائق احترامي

#2

تحتاج الى ActionListener والكلاس عامل implement

اذا كل ما عليك ان تقارن الحدث اذا كان من زر الخروج مثلا سينفذ الكود المطلوب

JButton exit,memory;

في الميثود actionPerformed اضف الاسطر التالية


if(e.getSource()==exit){
//exit code
}
else if(e.getSource()==memory){
//memory code
}

منقطع من حين لاخر

#3

أبو فؤاد

شكرا لك على الرد

جزيت خيرا

حبذا لو وضحت طريقة استخدام anounous class التي تشمل windowAdapter

و

mouseAdapter

ولك الشكر

#4
JButton button=new JButton("EXIT");
	  button.addActionListener(new ActionListener() {
		  public void actionPerformed(ActionEvent e) {
			  System.out.println("You're Press Exit Button");
		  }
	  });
#5

تم حل البرنامج ولله الحمد :)

شكرا لكم .. وجزيتتم خيرا

مع أني لم أجد ما أردت بالضبط ..شكرا لكم

تنويه

ActionListener هو من نوع Interface

so can't instatiate an object of this type

new ActionListener() >> error

to coorect that we use class WindowAdapter

with appropriate method

Thank u

#7

that's right :)

java is more power

soory for late

thank u

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…