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

مشكلة في رسم على الframe

بدأه pcmoon في 7 أكتوبر 2009 · 15 رد · 1,317 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

اريد تصحيح كود و تفسير عدم إضهر الخطين

import javax.swing.JPanel;
import java.awt.Graphics;

public class DrawPanel extends JPanel
{
public void painComponent(Graphics g)
{
super.paintComponent( g );

int width = getWidth();
int height = getHeight();

g.drawLine(0,0,height,width);
g.drawLine(0,height,width,0);

}
}

import javax.swing.JFrame;

public class DrawPanelTest
{
public static void main(String args [])
{
DrawPanel pn = new DrawPanel();

JFrame jf = new JFrame();

jf.add(pn);



jf.setSize(250,250);

jf.setVisible(true);
}
}

و اريد معرفة ما معنى هذا السطر

fn.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );

Mail : pc-moon@hotmail.com

من تواضع لله رفعه

قل خيرا أو اصمت

#2

سلام عليكم

الحمد لله تم حلها الحل في الملحق

DrawPanel.rar

Mail : pc-moon@hotmail.com

من تواضع لله رفعه

قل خيرا أو اصمت

#3

اتفضل ياعم

-------------

import java.awt.Color;
import java.awt.Dimension;
import javax.swing.JFrame;

public class DrawPanelTest extends JFrame {

	private DrawPanel drawPanel;

	public DrawPanelTest() {
		drawPanel = new DrawPanel();
		drawPanel.setBackground(Color.GREEN);
		getContentPane().add(drawPanel);
	}

	public static void main(String args[]) {
		DrawPanelTest pn = new DrawPanelTest();
		pn.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		pn.setSize(new Dimension(600, 300));
		pn.setLocationRelativeTo(null);
		pn.setVisible(true);
		pn.setExtendedState(MAXIMIZED_BOTH);
	}
}

import java.awt.Graphics;
import javax.swing.JPanel;

public class DrawPanel extends JPanel {

	@Override
	protected void paintComponent(Graphics g) {
		super.paintComponent(g);
		int width = getWidth();
		int hight = getHeight();
	  //  g.setColor(Color.BLUE);
		g.drawLine(0, 0, width, hight);
		g.drawLine(0, hight, width, 0);
	}
}

شوف الكود هذا و لو ما عرفت شئ قول :lol:

تم تعديل هذه المشاركة بواسطة mr.beshoy في 11 أكتوبر 2009 في 04:36

#4

شكراً لك اخي الفاضل

اريدك ان تشرح لي القلي من هذي الاسطر

import java.awt.Dimension;
import java.awt.Color;
DrawPanel
	   DrawPanelTest pn = new DrawPanelTest();
		pn.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		pn.setSize(new Dimension(600, 300));
  pn.setExtendedState(MAXIMIZED_BOTH);
super.paintComponent(g);
 @Override
Graphics g //هذا بارامتر ماذا يضع فيه هل اللوحة ام لا

و شكراً لك

Mail : pc-moon@hotmail.com

من تواضع لله رفعه

قل خيرا أو اصمت

#5
DrawPanelTest pn = new DrawPanelTest();

بعمل intialization from this class

عشان أقدر انادم على الدوال الى استعملتها تحت هذا السطر .

---------------------------------------------------------------------------------------

 pn.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

ابداً هذه دالة واضحة من اسمها انها بتجعلك تستخدم الأمر ال defult لغلق الشاشة JFrame.EXIT_ON_CLOSE

و اقرا عنها فى التيتوريل شوية هتعرف أكثر .

من خلال كتابة اسمه الدالة هذه فى جوجل هيظهر نتائج كويسة عنها.

------------------------------------------------------------------------------------------

 pn.setSize(new Dimension(600, 300));

بردو واضحة : دالة لوضع الحجم من ناحية الإتساع و الإرتفاع مُمررين بدورهم للكلاس Dimension الذى بدروه يحدد طول و عرض الشاشة

----------------------------------------------------------------------------------------------------------------

	   pn.setLocationRelativeTo(null);

لتظهر الفريم فى المنتصف

--------------------------------------------------------------

  pn.setExtendedState(MAXIMIZED_BOTH);

لجعل الفريم تظهر بمائ الشاشة كلها

و لو مش وضعت حجم لها باستعمل ال setsize

عندما تعمل تصغير لها تظهر و كانها نقظه فلابد من استعمال الإثنين

--------------------------------------------------------------------------

ال painComponent دالة الرسم

ال المتغير g من الكلاس Graphics من خلاله بنادم على دوال الرسم

و دائما لابد من عمل override

هى دالة مكتوبة فىالجافا و و انا ب override عليها مش اكثر

لو مش واضح كلامى الإخوة الأفاضل يساعدوك

سلام

#6

شكراً لك اخي الفاضل

و لي رجعة حتى يمكنوني حل باقي تمارين الكتاب و شكراً لك لانك علمتني اسلوب جديد لطباعة لرسم

و سوف ابدل مابوسعي لكي اتقن جزى من الجافا لانة شبة مستحيل ان اتقن كامل اللغة

و لي رجعة ان شاء الله اذا وقف علية كود ما

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

اسف و اريد معرفة ما معني هذي الكلمة

@Override

و شكراً لك مرة اخرى

Mail : pc-moon@hotmail.com

من تواضع لله رفعه

قل خيرا أو اصمت

#7

لا شكر على واجب و ما فيش داعى للأسف يا صديقى :lol:

----------------------------------------------------------

شوف القصة كالآتى :

-----------------

الدالة paintComponent(Graphics g)

أصلاً موجودة بداخل ال class الكبير JComponent الذى هو ابن من الكلاس Object

فانت لما حضرتك بتكتب دالة موجودة من superclass و تضعها فى ال class وارث للهذا ال class انت كده بتعملها override

اى بتكتب فيها ما تريده و لا تغير مما كانت فيه

مثال بسيط لذلك

---------------

import javax.swing.JOptionPane;

public class TestOverride {

	private String name;
	public TestOverride() {
		myName(name);
		new Test();
	}

	public void myName(String name) {
		name = "Beshoy atef";
		System.out.println("My name is:" + name);
	}

	public static void main(String[] args) {
		new TestOverride();
	}

	public class Test extends TestOverride {

		@Override
		public void myName(String name) {
			super.myName(name);
			name = "pcmoon";
			JOptionPane.showConfirmDialog(null, "My name is:" + name);
		}
	}
}

الكود هذا فيه مشكلة انا لما بيتنفذ بيدخل فى حلقة لا نهائية و لا يتوقف

لو حد يعرف حل يقول

حاولت استعمل ال thread فيه لكن دون جدوى

و انا هحاول تانى

شكرا

#8

أخ pcmoon

بالنسبة لـ @override

أي جملة تأتي قبل الدالة method أو الفئة Class وتبدأ بالعلامة @ تسمى ملاحظات annotation

أخ بيشوي

لما تعمل كائن من الابن في البداية يتم مناداة الباني constructor الخاص بالأب أولاً

ثم يتم نداء الباني الخاص بالابن

وكما هو في مثالك فأنت تقوم بعمل كائن من من الابن في الدالة main

ثم تعود وتعمل كائن جديد من الابن في الباني الخاص بالأب

فطبيعي أن تحصل على تكرار غير منتهي infinite loop

تحياتي

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

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

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

728x90.png

#9

طب ممكن تتكرم بس و تقول حلها

--------------------------------------------

حضرتك يا مستر بتقول بتعمل كائن من الابن فى الدالة main

ازاى ؟؟؟

انا كاتب الكلاس الرئيسى الى هو الاب و ليس الأبن ...

---------------------------------------------------------------

انا شخصيا بعلل سبب ال حلقة غير المنتهية بانه كل مرة

لان فى الكلاس test

بنادم على الدلة myname

فا مش بينتهى للابد

اتكرم وق ولنا الحل انت مش خسران و كلنا هنستفاد

و برحتك بردو

سلام

#10

اتمنى التوضيح مافائدة @Override

و شكراً لكم

مع خالص تمنى لكم بالتوفيق في الدنيا و الاخرة

Mail : pc-moon@hotmail.com

من تواضع لله رفعه

قل خيرا أو اصمت

#11

عند اشتقاق صنف class1 من صنف آخر class2

public class class1 extends class2

هنا يرث الصنف class1 كل الدوال في الصنف class2

افرضأن الصنف class2 يملك دالة تسمى method1

فإن الصنف class1 لا يمكن أن يسمي أحد دواله بـ method1 إلا إذا أضاف @Override

حيث تفيد أن يتم تجاوز الدالة ( عدم تنفيذها ) في الصنف class2 وتنفيذ الدالة الموجودة في الصنف class1

بالتوفيق .

300_130.gif

#12

بمعنى ان jpanel عبارة عن class و نحنى بنطلب كل method فية و لمن سوينا class للرسم اضفنا @Override لحذف الmethod الي بداخل claas jpanel

شكراً لك على التوضيح

اريد اضافة معلومة كتاب java how to programe 6edition لم يكتب @Override ابداً مع العلم انا عرفت الخطا الي اول وقعت فية و الحمد لله

و عندما حذفت @Override لم يتغير شي

اسف على الاطالة

و شكراً لكل من ساعدني و لي رجعة على تعاليق في الاكواد الجاية

تم تعديل هذه المشاركة بواسطة pcmoon في 14 أكتوبر 2009 في 22:53

Mail : pc-moon@hotmail.com

من تواضع لله رفعه

قل خيرا أو اصمت

#13

أخ rohaili الكلام ليس صحيح تماماً

كل ما تقوم به annotation هو أن تعطي معلومات عن الدالة أو الفئة

لكنها لا تلزمك بذلك

بالنسبة للأخ بيشوي سأتجاهل اللهجة الغريبة

لكني سأعيد كلامي مرة ثانية

1- الباني constructor في الفئة الابن subclass تنادي الباني في الأب superclass بشكل تلقائي

2- انت تقوم بمناداة الباني الخاص بالأب في الباني الخاص بالابن

3- لاحظ أن الفقرة رقم واحد تأخذك إلى الفقرة رقم 2 والفقرة رقم 2 تعيدك إلى الفقرة رقم واحد وهذا يؤدي إلى حلقة غير منتهية

تحياتي

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

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

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

728x90.png

#14

جزاك الله خيرا أخي علاء ، هي فعلا ليست إلزامية ولكن من كثرة ما استخدمها ظننتها كذلك .

ولكن ، ألا يعني إضافة دالة موجودة في الصنف الأب إلى الصنف الإبن ، أن يتم تنفيذ الدالة الموجودة في الإبن ، وتجاهل الدالة في الصنف الأب ، إلا إذا تم استدعاها من قبل الإبن .

300_130.gif

#15

صحيح أخ rohili

تحياتي

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

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

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

728x90.png

#16

انا ممكن أجاوب علي آخر سؤال

حضرتك لما تعمل Frame لازم تعملة exit لما تدوس close علشان الframe ميفضلش معمله run و لو جيت تفتحة تاني ميتفتحش

فحضرتك بتحط الجملة دي في ال main أو ال conestractor اللي هتستدعيه بيها علشان لما تغلق ال frame يتقفل و ميفضلش شغال

يا رب اكون قدرت أفيد حضرتك

شكراً

i wANT tO bE a gOOD pROGRAMMER (ISA)

i wANT tO bE a gOOD gRAPHICS dESIGNER(ISA)

dREAM

TO Be Or Not To Be It Is The Matter

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