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

نقطة غامضة بالفريم

بدأه vector_ever في 4 أبريل 2011 · 5 رد · 593 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

سابقا وفي موضوع سابق طرحت موضوع لكن اعتقد انه الكود كان معقد جدا لذلك لم يكن من السهل هضم السؤال

ولعدم تجاوزي للعقبة التي انا بها قررت ان ابني كود بسيط وسهل وبدائي جداً واشرح به مشكلتي, فلنفرض الكود التالي:

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

public class DrawTest extends JPanel{

	 private JScrollBar jscrbHort = new JScrollBar(JScrollBar.HORIZONTAL);
	 private JScrollBar jscrbVert = new JScrollBar(JScrollBar.VERTICAL);

	 private int x = 50;
	 private int y = 5;

	 private int PIX = 20;
	 private int PIY = 40;


	 public static void main (String[] args){
		 DrawTest draw = new DrawTest();
         JFrame frm = new JFrame("Line");
         frm.setSize(1200, 500);
         frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         frm.add(draw);
         frm.setVisible(true);
         Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
         int x = (screenSize.width - frm.getWidth())/2;
         int y = (screenSize.height - frm.getHeight())/2;
         frm.setLocation(x, y);
	 }

	 protected void paintComponent(Graphics g ) {
         super.paintComponents(g);

         g.drawLine(PIX, y*PIY, x*PIX, y*PIY);
	 }
}

اعتقد ان الكود واضح حيث قمت ببناء فريم ورسمت بداخله خط مستقيم كما هو واضح بالشكل التالي

post-152477-053184800 1301879681_thumb.j

الآن لنفرض اننا قمنا بزيادة قيمة المتحول x الى 70 عندئذ فان الخط المستقيم الذي سيتم رسمه سيتعدى مساحة الاطار ولن نستطيع رؤيته كاملا حتى لو قمنا بتكبير الاطار لاقصى حد

post-152477-040520500 1301879989_thumb.j

طبعا الحل المنطقي هو اضافة scroll لحل هذه المعضلة وقد قمت باضافته حسب الكود التالي

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

public class DrawTest extends JPanel{

	 private static JScrollBar jscrbHort = new JScrollBar(JScrollBar.HORIZONTAL);
	 private static JScrollBar jscrbVert = new JScrollBar(JScrollBar.VERTICAL);

	 private int x = 70;
	 private int y = 5;

	 private int PIX = 20;
	 private int PIY = 40;

	 public static void main (String[] args){
		 DrawTest draw = new DrawTest();
         JFrame frm = new JFrame("Line");
         frm.setSize(1200, 500);
         frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         frm.setVisible(true);
         Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
         int x = (screenSize.width - frm.getWidth())/2;
         int y = (screenSize.height - frm.getHeight())/2;
         frm.setLocation(x, y);

         Container container = frm.getContentPane();
         container.setLayout(new BorderLayout());
         container.add(draw, BorderLayout.CENTER);
         container.add(jscrbVert, BorderLayout.EAST);
         container.add(jscrbHort, BorderLayout.SOUTH);

	 }

	 protected void paintComponent(Graphics g ) {
         super.paintComponents(g);

         g.drawLine(PIX, y*PIY, x*PIX, y*PIY);
	 }
}

لكن لم أستفد شيئا لسبب لا اعلمه!!!

post-152477-034927700 1301881737_thumb.j

طبعا اعتقد ان المسالة الآن واضحة تماما وقد جربت وحاولت ومحاولاتي تشهد علي

فهل من مساعدة واقتراح يا اخوان!!

المرفقات
frame.jpgframe1.jpgframe 2.jpg

تم تعديل هذه المشاركة بواسطة vector_ever في 4 أبريل 2011 في 07:57

إذا نظــرتَ نيـوب اللـّيـثِ بـارزةً         فـلا تظــنَنَ أَنَّ اللـّيـــثَ يبْتسـِـــمُ


 


 


رسم المخططات البيانية بواسطة الجافا


 


كتاب تحليل وتصميم نظم المعلومات


#2

استخدم JScrollPane بدلاً من JScrollBar

597657.png
#3
Eng.Fouad كتب:

استخدم JScrollPane بدلاً من JScrollBar

iهل قمت بتجربة الكود مع JScrollPane ؟؟؟

لاني انا قمت بتجربته ولم احصل على شيء مفيد

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

فيا ريت تكتب الكود الصحيح بعد التعديل

إذا نظــرتَ نيـوب اللـّيـثِ بـارزةً         فـلا تظــنَنَ أَنَّ اللـّيـــثَ يبْتسـِـــمُ


 


 


رسم المخططات البيانية بواسطة الجافا


 


كتاب تحليل وتصميم نظم المعلومات


#4

تفضل

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

public class DrawTest extends JPanel {

	private int x = 70;
	private int y = 5;
	private int PIX = 20;
	private int PIY = 40;
	static JScrollPane scrollPane;

	public static void main(String[] args) {
    	DrawTest draw = new DrawTest();
    	JFrame frm = new JFrame("Line");
    	frm.setSize(1200, 500);
    	frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	frm.setVisible(true);
    	Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    	int x = (screenSize.width - frm.getWidth()) / 2;
    	int y = (screenSize.height - frm.getHeight()) / 2;
    	frm.setLocation(x, y);

    	Container container = frm.getContentPane();
    	container.setLayout(new BorderLayout());
    	scrollPane = new JScrollPane(draw);
    	scrollPane.setAutoscrolls(true);
    	container.add(scrollPane);
	}

	@Override
	public void paint(Graphics g) {
    	super.paint(g);
    	g.drawLine(PIX, y * PIY, x * PIX, y * PIY);
	}

	@Override
	public Dimension getPreferredSize() {
    	Dimension unzoomed = getLayout().preferredLayoutSize(this);
    	System.out.println(unzoomed);
    	Dimension zoomed = new Dimension((int) ((double) unzoomed.width * PIY * PIX),
            	(int) ((double) unzoomed.height * y * PIY));
    	System.out.println(zoomed);
    	return zoomed;
	}
}
1

Software Developer
Mahmoudkelany.com


 

#5

شكرا اخي جزاك الله كل خير

لكن عندي سؤال لماذا تستخدم دائما هذه الجزئية

 @Override
        public void paint(Graphics g) {
        super.paint(g);

لانني دائما استخدم

@Override
        protected void paintComponent(Graphics g) {
        super.paint(g);

مع العلم اني عند استعمالي لها فان الرسم كان يتشوه بشدة عند تحريك الـ scroll

وكنت في اشدالحيرة لتعلل سبب ذلك الى أن قمت بالتحويل من protected الى public كما كنت انت قد كتبت في ردك علي

مع ان الكتاب الذي ادر منه لا يستخدم الا

@Override
        protected void paintComponent(Graphics g) {
        super.paint(g);

على كل حال شكرا جزيلا اخي

إذا نظــرتَ نيـوب اللـّيـثِ بـارزةً         فـلا تظــنَنَ أَنَّ اللـّيـــثَ يبْتسـِـــمُ


 


 


رسم المخططات البيانية بواسطة الجافا


 


كتاب تحليل وتصميم نظم المعلومات


#6
vector_ever كتب:

شكرا اخي جزاك الله كل خير

لكن عندي سؤال لماذا تستخدم دائما هذه الجزئية

 @Override
        public void paint(Graphics g) {
        super.paint(g);

لانني دائما استخدم

@Override
        protected void paintComponent(Graphics g) {
        super.paint(g);

مع العلم اني عند استعمالي لها فان الرسم كان يتشوه بشدة عند تحريك الـ scroll

وكنت في اشدالحيرة لتعلل سبب ذلك الى أن قمت بالتحويل من protected الى public كما كنت انت قد كتبت في ردك علي

مع ان الكتاب الذي ادر منه لا يستخدم الا

@Override
        protected void paintComponent(Graphics g) {
        super.paint(g);

على كل حال شكرا جزيلا اخي

انا استخدم الـpaint لاننى اريد الرسم على الpanel وليس تغيير المكون كله

لكن بالنسبه للـ public , protected فانا استخدم الـ netbeans IDE فبالتالى مش بكتبها

انا بطلب اعمل ليها override وهو بيعملها لكن هاقولك على حاجه

الداله اصلا فى الـ parent class عباره عن public فبالتالى من المفترض انك تعملها public

لكن فيه ناس بتعملها protected علشان يقولك مش هاشوفها غير فالوراثه فقط

فبالتالى يكون اكثر امانا

1

Software Developer
Mahmoudkelany.com


 

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