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

عمل آله حاسبة خطوة بخطوة

بدأه majjed2000 في 18 أغسطس 2008 · 12 رد · 1,800 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته ،،،

اول شيء احب اشكر الشباب الي في المنتدى على الخدمات الي قاعدين يقدمونها لنا كمبتدأين في البرمجه في الجافا ....

انا في الحقيقه من شهر قاعد اتعلم جافا وقاعد اتابع المنتدى بشكل كبير وفعلا قاعد استفيد من الافكار الي يقدمونها اخواني الاعضاء لذلك قررت اني بدل من اني جالس وقاعد بس اقرأ ، اني اساهم ولو بشكل بسيط .....

فكرتي في هذا الموضوع اني افكر بشكل مسموع واطرح البرنامج الي جالس اشتغل عليه الآن في المنتدى ونناقش الافكار مع بعض ....

البرنامج: عباره عن آله حاسبه باستخدام واجهة المستخدم

يحتوي البرنامج على ثلاث كلاسات

1. Calculator

يقوم بانشاء الكلاس الثاني والثالث

2. UserInterface

يقوم بانشاء الفريم والقوائم الخ.....

3.Calc

يقوم بتطبيق العمليات الحسابية

أخواني هذا البرنامج الي جاس اشتغل عليه الآن ، والهدف الاساسي بالنسبة لي الواجهه ،

لذلك ابستأذنكم اني ابدأفي البداية بتصميم الواجهه..... ما رأيكم؟؟؟؟؟ ---> منتظر ردكم

#2

بالتأكيد هذا شيء مرحب به

وأي شيء سيقف معاك

سنساعدك بإذن الله

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#3

أخوي علاء مشكور على ردك @ ومانستغي عن مساعدتك والحقيقه انا قريت كثير من مواضيعك واستفدت منها كثير .....

#4

بسم الله الرحمن الرحيم

تمكنت بفضل الله من انهاء الكلاس الأول والثاني

Calculator and UserInterface

في الحقيقه انا فضلت اني افصل بين الكلاسات لأني احاول اتعلم كيف اتعامل مع البرنامج كموديلس

الكلاس الأول هذا الكود حقه


* The main class of calculator.
*
* @author Majed
* @version V 1.0
*/

public class Calculator
{
private UserInterface gui;

/**
* Create new calculator.
*/
public Calculator()
{
gui = new UserInterface();
}
}
/**

/**

* The main class of calculator.

*

* @author Majed

* @version V 1.0

*/

public class Calculator

{

private UserInterface gui;

/**

* Create new calculator.

*/

public Calculator()

{

gui = new UserInterface();

}

}

[code/]

هذا الكود الرئيسي والذي يقوم ببساطه باستدعاء واجهة المستخدم

تم تعديل هذه المشاركة بواسطة majjed2000 في 19 أغسطس 2008 في 03:38

#5
</b></div>import java.awt.*;
 import java.awt.event.*;
 import javax.swing.*;
 import javax.swing.border.*;

 /**
  * GUI for the calculator.
  * 
  * @author Majed
  * @version V 1.0
  */
 public class UserInterface
	 implements ActionListener
 {
	 private JTextField display;

	 /**
	  * Create user interface.
	  */
	 public UserInterface()
	 {
		 makeFrame();
	 }

	 /**
	  * Make the frame.
	  */
	 private void makeFrame()
	 {
		 JFrame frame = new JFrame();

		 JPanel contentPane = (JPanel)frame.getContentPane();
		 contentPane.setLayout(new BorderLayout(8, 8));
		 contentPane.setBorder(new EmptyBorder( 10, 10, 10, 10));

		 display = new JTextField();
		 contentPane.add(display, BorderLayout.NORTH);

		 JPanel buttonPanel = new JPanel(new GridLayout(4, 4));
			 addButton(buttonPanel, "7");
			 addButton(buttonPanel, "8");
			 addButton(buttonPanel, "9");
			 addButton(buttonPanel, "C");

			 addButton(buttonPanel, "4");
			 addButton(buttonPanel, "5");
			 addButton(buttonPanel, "6");
			 addButton(buttonPanel, "?");

			 addButton(buttonPanel, "1");
			 addButton(buttonPanel, "2");
			 addButton(buttonPanel, "3");
			 addButton(buttonPanel, "X");

			 addButton(buttonPanel, "0");
			 addButton(buttonPanel, "+");
			 addButton(buttonPanel, "-");
			 addButton(buttonPanel, "=");

		 contentPane.add(buttonPanel, BorderLayout.CENTER);

		 JLabel status = new JLabel();
		 String text = "Version V 1.0";
		 status.setText(text);
		 contentPane.add(status, BorderLayout.SOUTH);

		 frame.pack();
		 frame.setVisible(true);
	 }

	 /**
	  * Add a button to the button panel.
	  */
	 private void addButton(Container panel, String buttonText)
	 {
		 JButton button = new JButton(buttonText);
		 button.addActionListener(this);
		 panel.add(button);
	 }

	 /**
	  * An interface action
	  * 
	  */
	 public void actionPerformed(ActionEvent event)
	 {
		 String command = event.getActionCommand();

		 if(command.equals("0") ||
			command.equals("1") ||
			command.equals("2") ||
			command.equals("3") ||
			command.equals("4") ||
			command.equals("5") ||
			command.equals("6") ||
			command.equals("7") ||
			command.equals("8") ||
			command.equals("9") ||
			command.equals("+") ||
			command.equals("-") ||
			command.equals("X") ||
			command.equals("=") ||
			command.equals("C") ||
			command.equals("?")) {
				System.out.println(" Listen to Action");
		 } 
	 }
 }

 <div><b>

هذا الكلاس فيه الواجهه

اول شيء يقوم بانشاء الفريم بواسطة استدعاء مثود makeFrame

الفريم يحتوي على ثلاث اجزاء: textField in the NORTH, buttons in the CENTER and label in the SOUTH

طبعا البوتون لم تبرمج بعد لكن يتم فحصها عن طريق طباعة عبارة على terminal window

وسوف اعمل لاحقا على برمجة البوتونس

شباب فيه اي سؤال استفسار اقتراح ..... لاتتردد ؟؟؟؟؟؟؟؟

#6

اعجبتني طريقة اضافة JButton

private void addButton(Container panel, String buttonText)
	 {
		 JButton button = new JButton(buttonText);
		 button.addActionListener(this);
		 panel.add(button);
	 }

اخي الكريم الا يوجد حل يمكننا من الاستغناء عن التكرار في الشفره التالية

addButton(buttonPanel, "7");
			 addButton(buttonPanel, "8");
			 addButton(buttonPanel, "9");
			 addButton(buttonPanel, "C");

			 addButton(buttonPanel, "4");
			 addButton(buttonPanel, "5");
			 addButton(buttonPanel, "6");
			 addButton(buttonPanel, "?");

			 addButton(buttonPanel, "1");
			 addButton(buttonPanel, "2");
			 addButton(buttonPanel, "3");
			 addButton(buttonPanel, "X");

			 addButton(buttonPanel, "0");
			 addButton(buttonPanel, "+");
			 addButton(buttonPanel, "-");
			 addButton(buttonPanel, "=");

و دمت بخير

تم تعديل هذه المشاركة بواسطة العيافـي في 19 أغسطس 2008 في 06:13

#7
 اخي الكريم الا يوجد حل  يمكننا من الاستغناء عن التكرار في الشفره التالية

ما رأيك في التالي:

String Numbers = new String("789C456?123X0+-=");
	   for(int i=0;i<Numbers.length();i++)
		{

			addButton(buttonPanel, Numbers.charAt(i)+"");

		}

تم تعديل هذه المشاركة بواسطة djug في 19 أغسطس 2008 في 15:18

#8

اقتراح آخر لتقليل الكود الخاص بـ public void actionPerformed(ActionEvent event)

ArrayList<String> stringList =new ArrayList<String>();
String Numbers = new String("789C456?123X0+-=");

		 for(int i=0;i<Numbers.length();i++)
		 {
		 stringList.add(Numbers.charAt(i)+"");

		 }

  if (stringList.contains(command))

 {System.out.println(" Listen to Action");}

تم تعديل هذه المشاركة بواسطة djug في 19 أغسطس 2008 في 16:36

#9

هلا اخوي العيافي ومشكور على ردك.....

في الحقيقه انا حاولت اني امنع التكرار هذا بس ما قدرت اتوصل لنتيجه.....

انت تقصد اني اسوي حلقة تكرار مثل for أو تقصد شيء ثاني....

#10

هلا اخوي djug ومشكور على ردك ....

جربت الكود الأول الي اقترحت وفعلا اشتغل >>> ممكن شرح مبسط له

بالنسبة للكود الثاني حاولت معاه بس ما ظبط >> تعريف stringList يعتبر String والا مصفوفه ,,المشكلة عندي في المثود add

مره ثانيه الف شكر على مساهمتك.....

#11

بالنسبة للكود الأول

1/

addButton(buttonPanel, "ButtonTitle)+"");

يقوم بإنشاء Button يحمل عنوان ButtonTitle

أي لو قمنا يحلقة تكرارية نغير في كل مرة محتوى الـ String قإنه يمكن تجميع إنشاء أكثر من Button في حلقة واحدة

2/ بالنسبة إلى

Numbers.charAt(i) عبارة عن char (حرف واحد)

و بما أن الدالة addButton تحتاج إلى string في الـ parameter الثاني فإنه يجب تحويل الـ char إلى String

و لعمل ذلك يكفي أن تضيف الجملة الفارغة "" إلى الـ char

أما بخصوص الكود الثاني:

نسيت أن أقوم بالاعلان عن stringList

سأقوم بتعديل الكود

أضف إليه

ArrayList<String> stringList =new ArrayList<String>();

و لا تنسى إضافة السطر التالي إلى أسطر الـ import

(تضاف بطريقة آلية في eclipse)

import java.util.ArrayList;
#12

الف شكر اخوي Djug على التوضيح

وهذا الكود بعد اضافة حلقات التكرار بناء على اقتراح الأخوان................

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
import java.util.ArrayList;

/**
 * GUI for the calculator.
 * 
 * @author Majed
 * @version V 1.0
 */
public class UserInterface
	implements ActionListener
{
	private JTextField display;


	/**
	 * Create user interface.
	 */
	public UserInterface()
	{
		makeFrame();
	}

	/**
	 * Make the frame.
	 */
	private void makeFrame()
	{
		JFrame frame = new JFrame();

		JPanel contentPane = (JPanel)frame.getContentPane();
		contentPane.setLayout(new BorderLayout(8, 8));
		contentPane.setBorder(new EmptyBorder( 10, 10, 10, 10));

		display = new JTextField();
		contentPane.add(display, BorderLayout.NORTH);

		JPanel buttonPanel = new JPanel(new GridLayout(4, 4));

		String numbers = new String("789C456?123X0+-=");
			for(int i = 0; i < numbers.length();i++)
			{
				addButton(buttonPanel,numbers.charAt(i)+"");
			}

		contentPane.add(buttonPanel, BorderLayout.CENTER);

		JLabel status = new JLabel();
		String text = "Version V 1.0";
		status.setText(text);
		contentPane.add(status, BorderLayout.SOUTH);

		frame.pack();
		frame.setVisible(true);
	}

	/**
	 * Add a button to the button panel.
	 */
	private void addButton(Container panel, String buttonText)
	{
		JButton button = new JButton(buttonText);
		button.addActionListener(this);
		panel.add(button);
	}

	/**
	 * An interface action
	 * 
	 */
	public void actionPerformed(ActionEvent event)
	{
		String command = event.getActionCommand();
		String numbers = new String("0123456789+X-=C?");
		ArrayList<String> stringList = new ArrayList<String>();

		for(int i=0; i < numbers.length(); i++)
		{

			stringList.add(numbers.charAt(i)+"");
		}
		if (stringList.contains(command))
		{
			 System.out.println(" Listen to Action");
			}

	}
}
#13

ما قصدته هو

String[]btnValues={"7", "8", "9", "C",
		 					"4", "5", "6", "?",
		 					"1", "2", "3", "X",
		 					"0", "+", "-", "=" };
		 for(String value:btnValues){
		 	addButton(buttonPanel, value);
		 }

اما بالنسبة للاضافة السابقة

String Numbers = new String("789C456?123X0+-=");

فهي شبيهه لما اردت ..

اما بالنسبة للعملية الشرطية داخل الميثود actionPerformed فلا اعرف الهدف او الغايه منها

if (stringList.contains(command))
		{
			 System.out.println(" Listen to Action");
			}

فقد تسبب هذا الشرط

باضافة متغير من نوع ArrayList

اعادة تعريف المتغير numbers

اضافة حلقة تكرار

السؤال هل هذا الشرط مفيد بحيث لا يمكننا الاستغناء عنه، مع اننا نعلم اننا لا نستطيع الوصول الى الميثود actionPerformed الى من خلال الازرار التي اضفناها.

اي ان الشرط دائما سيتحقق (اي سيكون true)

على اي حال قمت باضافة بسيطة

	public void actionPerformed(ActionEvent event)
	{
		String command = event.getActionCommand();
		if(isNumeric(command)||command.equals(".")){
			display.setText(display.getText()+command);
		}

	}
	private boolean isNumeric(String text){
		return text.matches("\\p{Digit}");
	}
	public static void main(String[]ar){
		new UserInterface();
	}

ارجو ان تكون الاضافة مقيده

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