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

أريد أن أرسم مستطيل ناقص ضلع

بدأه Pink Lady في 13 مايو 2010 · 45 رد · 3,316 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم..

كما في العنوان.. أريد أن أرسم مستطيل ضلعه الأيمن غير موجود.. باستخدام Polyline2D..

أو أي طريقة أخرى..

مع العلم أنني أقوم برسم متجهات..

قمت برسم المربع والمستطيل والدائرة من غير أية مشاكل .. وهذا نموذج من الرسم

public RoundRectangle(Point start, Point end, Color color) {
            super(color);
            position = new Point(Math.min(start.x, end.x),
                    Math.min(start.y, end.y));
            roundRectangle= new RoundRectangle2D.Double(origin.x,
                    origin.y,
                    Math.abs(start.x - end.x), // Width
                    Math.abs(start.y - end.y),15,15); // & height
        }

        public Shape getShape() {
            return roundRectangle;
        }

        public java.awt.Rectangle getBounds() {
            return getBounds(roundRectangle.getBounds());
        }

        public void modify(Point start, Point last) {
            position.x = Math.min(start.x, last.x);
            position.y = Math.min(start.y, last.y);
            roundRectangle.width = Math.abs(start.x - last.x);
            roundRectangle.height = Math.abs(start.x - last.x);
        }

        public void draw(Graphics2D g2D) {
            draw(g2D,roundRectangle);
        }

مع الشكر الجزيل

#2

هذه هي محاولتي في الحل ذلك ..

private Polyline2D.Double polyline;
        public Polyline(Point start,Point end,Color color)
		{
            super(color);
            position = start;
            polyline = new Polyline2D.Double(new Point(end.x - position.x, end.y - position.y),
									new Point(origin,origin - 20) ,
									origin,
									new Point(new Point(end.x - position.x, end.y - position.y),new Point(origin,origin - 20))
									);

        }
        public Shape getShape() {
            return polyline;
        }

        public java.awt.Rectangle getBounds() {
            return getBounds(polyline.getBounds());
        }
        public void modify(){
		I dont Know .. ??
        }

        public void draw(Graphics2D g2D) {
            draw(g2D,polyline);
        }
    }
#3

السلام عليكم

برجاء التوضيح أكثر

ما المشكلة التي تواجهينها بالضبط في الكود

ما الذي تتوقعين ظهوره وما الذي ظهر؟

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

تحياتي

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

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

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

728x90.png

#4

عليكم السلام ورحمة الله أخ علاء..

في الشيفرة الأولى التي أرفقتها في الرد الأول .. هي شيفرة صحيحة.. تقوم بالعمل الذي أريده .. وهي أن ترسم مستطيل حوافه دائرية.. وكذلك قمت بعمل شيفرات مشابه لتلك الشيفرة .. بتغيرات بسيطة ... باستخدام الحزمة (Package)

java.awt.geom

باستخدام Line2D من هذه الحزمة استطعت ان ارسم الخط (Draw Line)..

وباستخدام Rectangle2D استطعت ان ارسم المستطيل..

إلا أن هذه الحزمة لا تشمل Polyline2D واثناء بحثي في الانترنيت وجدت

Polyline2D

- لم أعرف إلى أي حزمة ينتمي Polyline2D .؟

- لم أعرف كيفية كتابة الشيفرة له..؟ والشيفرة الموجودة في الرد الثاني.. هي محاولتي في كتابتها..

الشكل الذي اريد رسمه مثل هذا الشكل

dfdganedatastore.gif

#5

أختي هذه package غير تابعة للجافا أصلاً

وإنما مبنية على جافا

تحياتي

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

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

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

728x90.png

#6

الاخت pink lady

يمكنك عمل مستطيل ضلعه الايمن غير موجود بكل سهولة بدون الحاجة إلى اي مكتبة خارجية

وذلك عن طريق استخدام مثد drawline

هذه المثد ترسم خط عن طريق تحديد نقطة البداية (س,ص) ونقطة النهاية (س2,ص2)

فترسم خط مستقيم بين النقطتين

لذلك كل ما عليك فعله

هو رسم خط افقي من النقطة الاولى الى نقطة ثانية

ثم

رسم خط عمودي من النقطة الاولى إلى نقطة ثالثة

ثم رسم خط أفقي من التقطة الثالثة إلى نقطة رابعة موازية تماما للنقطة الثانية

هذا كود يقوم بهذه العملية

import java.awt.*;
import java.awt.event.*;
import java.awt.geom.Line2D;
import javax.swing.*;

public class LineUnder extends JFrame
    {
     LinePanel linePanel = new LinePanel();
     Point startPoint =null;
     public static final int LINE_WIDTH=100;
     LineUnder()
         {
         setDefaultCloseOperation(EXIT_ON_CLOSE);
         initContentPane();
         pack();
         setLocationRelativeTo(null);
         setVisible(true);
     }
     private void initContentPane()
         {
         linePanel.line.setLine(0d, 0d, 300d, 300d);
         getContentPane().add(linePanel);
     }

     class LinePanel extends JPanel
         {
         Point lineStart = new Point(0, 0);
         Point lineEnd = new Point(0, 0);
         Line2D line = new Line2D.Double(lineStart, lineEnd);
         //width of line
         private Stroke stroke = new BasicStroke(2.0f);
         private LineListener lis = null;
         LinePanel()
             {
             super();
             addMouseListener(lis = new LineListener(this));
         }
         //draw and delete line
         public void paintComponent(Graphics g)
             {
             super.paintComponent(g);
             Graphics2D g2 = (Graphics2D) g;
             g2.setStroke(stroke);

             g2.setColor(Color.RED);
             //draw shape of line
             if(startPoint!=null)
             {
            	 int x=startPoint.x;
            	 int y=startPoint.y;
             g2.drawLine(x, y, x+LINE_WIDTH, y);
             g2.drawLine(x, y, x, y+LINE_WIDTH);
             g2.drawLine(x, y+LINE_WIDTH, x+LINE_WIDTH,  y+LINE_WIDTH);
             }

         }
         public void setStartPoint(Point s)
         {
        	lineStart= s; 
         }
         public void setEndPoint(Point e)
         {
        	lineEnd= e; 
         }
         //define panel's size

         public Dimension getPreferredSize()
             {
             return new Dimension(400, 350);
         }
     }

     class LineListener extends MouseAdapter
         {
         private JComponent parent = null;
         LineListener(JComponent parent)
             {
             this.parent = parent;
         }
         public void mouseClicked(MouseEvent e)
             {
        	 startPoint = e.getPoint();
             parent.repaint();
         }
     }

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

لا بد من صنعاء وان طال السفر

#7

san3aniJava كتب:

الاخت pink lady

...

لك كل الشكر أخي san3aniJava..

:P

جعله الله في ميزان أعمالك..

#8
Pink Lady كتب:

لك كل الشكر أخي san3aniJava..

:P

جعله الله في ميزان أعمالك..

العفو

آمين اللهم آمين

والحمد لله آنكم وجدتم فيما طرحت ما يفيد

تحياتي

لا بد من صنعاء وان طال السفر

#9

أخي الكريم..

لدي سؤال إن أمكن .؟

كيف استطيع أن أحدد ال Bounds ( لا أعرف ما تُقال به في العربية ) لهذا الشكل .. لأنني احتاج إليه عندما اقوم بتحريك الشكل ..

لأنني أجد هذه المشكلة حالياً..

لدي Function تسمى getBounds.. لم استطع كتابة الكود الخاص بها ..

هل لك أن تخبرني إن كنت تعرف..

مع الشكر الجزيل لك..

#10

حدود

الحدود هي النقاط الأربعة التي تحدد المستطيل

يمكنك استنتاجها من هذا المقطع

g2.drawLine(x, y, x+LINE_WIDTH, y);
             g2.drawLine(x, y, x, y+LINE_WIDTH);
             g2.drawLine(x, y+LINE_WIDTH, x+LINE_WIDTH,  y+LINE_WIDTH);

تحياتي

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

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

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

728x90.png

#11
Pink Lady كتب:

أخي الكريم..

لدي سؤال إن أمكن .؟

كيف استطيع أن أحدد ال Bounds ( لا أعرف ما تُقال به في العربية ) لهذا الشكل .. لأنني احتاج إليه عندما اقوم بتحريك الشكل ..

لأنني أجد هذه المشكلة حالياً..

لدي Function تسمى getBounds.. لم استطع كتابة الكود الخاص بها ..

هل لك أن تخبرني إن كنت تعرف..

مع الشكر الجزيل لك..

اختي الكريمة

حسب ما فهمت

أنك تريدين أن تعرفي حدود المستطيل المفتوح المرسوم

فأنا لا اعرف كيف استفدتي من الكود السابق الذي كبتبه لكي

هل استخدمتيه كما هو

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

وهل فهمتي عمل الكود الذي طرحته لك

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

فكما ذكر استاذنا الاخ علاء في مشاركته الاخيرة

يمكنك استنتاج ذلك من الكود الذي اقتبسه لك

فالمستطيل مرسوم بناء على النقاط التالية

النقطة الألى: x,y

النقطة الثانية: x+LINE_WIDTH, y

النقطة الثالثة:- x, y+LINE_WIDTH

النقطة الرابعة: x+LINE_WIDTH, y+LINE_WIDTH

وقيم هذه المتغيرات في كودي تتحدد من خلال التالي

x= قيمة المحور السيني بالنسبة إلى مكان النقرة بمؤشر الفأرة على النافذة مع العلم أن الزاوية اليسرى العليا تمثل النقطة (0,0)

y = قيمة المحور الصادي بالنسبة إلى مكان النقرة بمؤشر الفأرة على النافذة

LINE_WIDTH= قيمة ثابتة قمت بتحديها بالعدد 100 وهي تحدد المسافة بين النقاط سواء على المحور السيني أو الصادي يعني بكلات أخرى تحدد طول أضلاع المستطيل وبما أنها قيمة ثابتة لجميع الأضلاع فالمستطيل مربع (متساوي الاضلاع)

والمستطيل المرسوم متكون من 3 خطوط

الخط الأول: هو خط مستقيم من النقطة الأولى إلى النقطة الثانية

الخط الثاني: هو خط مستقيم من النقطة النقطة الأولى إلى النقطة الثالثة

الخط الرابع: هو خط مستقيم من النقطة الثالثة إلى النقطة الرابعة

فأظن هذه المعلومات كافية لك اذا كنتي تريدين تحريك المستطيل

اذا لم تتمكني من ذلك

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

بالتوفيق

تحياتي

لا بد من صنعاء وان طال السفر

#12
san3aniJava كتب:

فأظن هذه المعلومات كافية لك اذا كنتي تريدين تحريك المستطيل

اذا لم تتمكني من ذلك

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

بالتوفيق

تحياتي

شكراً أخي الكريم..

قمت بتعديل الشفرة لكي تتناسب مع برنامجي..

عندما انتهي من ال getBound سأقوم بوضعها هنا..

شكراً جزيلا لك..

#13
san3aniJava كتب:

هو رسم خط افقي من النقطة الاولى الى نقطة ثانية

ثم

رسم خط عمودي من النقطة الاولى إلى نقطة ثالثة

ثم رسم خط أفقي من التقطة الثالثة إلى نقطة رابعة موازية تماما للنقطة الثانية

هذا كود يقوم بهذه العملية

             g2.drawLine(x, y, x+LINE_WIDTH, y);
             g2.drawLine(x, y, x, y+LINE_WIDTH);
             g2.drawLine(x, y+LINE_WIDTH, x+LINE_WIDTH,  y+LINE_WIDTH);

أخي الكريم..

استخدمت في الشفرة التي قمت بتعدليها .. فكرة هذه الجزيئية..

كل الأقتباس السابق هو ما استفدت منه.. لك كل الشكر

حيث أنني كنت أبحث عن شي جاهز يرسم لي الشكل.. كنت أتوقع أن أجد شيء شبيه ب drawLine وغيره..

الشفرة التي وضعتها أعطتني فكرة لكي أستخدمها..

هذه الشفرة التي في برنامجي..

        private GeneralPath lines;
        public static final int LINE_1=100;
        public static final int LINE_2=20;

        public Line(Point start,Point last,Color color){
            super(color);
            position = start;
            lines = new GeneralPath();
            lines.moveTo(origin.x, origin.y);
            lines.lineTo(origin.x, origin.y + LINE_2 );
            lines.lineTo( origin.x + LINE_1 ,origin.y + LINE_2);
            lines.moveTo(origin.x, origin.y);
            lines.lineTo(origin.x + LINE_1, origin.y  );

        }
#14
Pink Lady كتب:

أخي الكريم..

استخدمت في الشفرة التي قمت بتعدليها .. فكرة هذه الجزيئية..

كل الأقتباس السابق هو ما استفدت منه.. لك كل الشكر

حيث أنني كنت أبحث عن شي جاهز يرسم لي الشكل.. كنت أتوقع أن أجد شيء شبيه ب drawLine وغيره..

الشفرة التي وضعتها أعطتني فكرة لكي أستخدمها..

هذه الشفرة التي في برنامجي..

        private GeneralPath lines;
        public static final int LINE_1=100;
        public static final int LINE_2=20;

        public Line(Point start,Point last,Color color){
            super(color);
            position = start;
            lines = new GeneralPath();
            lines.moveTo(origin.x, origin.y);
            lines.lineTo(origin.x, origin.y + LINE_2 );
            lines.lineTo( origin.x + LINE_1 ,origin.y + LINE_2);
            lines.moveTo(origin.x, origin.y);
            lines.lineTo(origin.x + LINE_1, origin.y  );

        }

أحسنت

جميل جداً أختي

هل يعني هذا أنك تمكنت من تحريك الشكل كما تريدين؟

لا بد من صنعاء وان طال السفر

#15
san3aniJava كتب:

وهل فهمتي عمل الكود الذي طرحته لك

كثيراً

san3aniJava كتب:

النقطة الألى: x,y

النقطة الثانية: x+LINE_WIDTH, y

النقطة الثالثة:- x, y+LINE_WIDTH

النقطة الرابعة: x+LINE_WIDTH, y+LINE_WIDTH

وقيم هذه المتغيرات في كودي تتحدد من خلال التالي

x= قيمة المحور السيني بالنسبة إلى مكان النقرة بمؤشر الفأرة على النافذة مع العلم أن الزاوية اليسرى العليا تمثل النقطة (0,0)

y = قيمة المحور الصادي بالنسبة إلى مكان النقرة بمؤشر الفأرة على النافذة

LINE_WIDTH= قيمة ثابتة قمت بتحديها بالعدد 100 وهي تحدد المسافة بين النقاط سواء على المحور السيني أو الصادي يعني بكلات أخرى تحدد طول أضلاع المستطيل وبما أنها قيمة ثابتة لجميع الأضلاع فالمستطيل مربع (متساوي الاضلاع)

هل من طريقة تجعل المستخدم هو من يحدد حجم الشكل بدلا من انعطيه قيم كـ LINE_WIDTH..؟

فالأشكال الأخرى.. كرسم ال Line .. وال rectangle.. يقوم المستخدم (End User) باستخدام الماوس لتحديد بداية الشكل ونهايته..

san3aniJava كتب:

فأظن هذه المعلومات كافية لك اذا كنتي تريدين تحريك المستطيل

اذا لم تتمكني من ذلك

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

الحمد لله.. كانت المعلومات كافية جداً..

تم إنجازه..

سأطرح عليك سؤالا أيضا..

هل من طريقة سهلة.. لعمل ال Resize إلى الأشكال المرسومة.. لأنني سوف أحتاج إلى هذه الخاصية إن كان الشكل السابق لا يستطيع المستخدم تحديد حجمه..

لك كل الشكر والتقدير..

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

san3aniJava كتب:

أحسنت

جميل جداً أختي

هل يعني هذا أنك تمكنت من تحريك الشكل كما تريدين؟

:lol: شكرا لك..

نعم أستطعت تحريك الشكل ..

لك كل الشكر

#16
Pink Lady كتب:

كثيراً

هل من طريقة تجعل المستخدم هو من يحدد حجم الشكل بدلا من انعطيه قيم كـ LINE_WIDTH..؟

فالأشكال الأخرى.. كرسم ال Line .. وال rectangle.. يقوم المستخدم (End User) باستخدام الماوس لتحديد بداية الشكل ونهايته..

الحمد لله.. كانت المعلومات كافية جداً..

تم إنجازه..

سأطرح عليك سؤالا أيضا..

هل من طريقة سهلة.. لعمل ال Resize إلى الأشكال المرسومة.. لأنني سوف أحتاج إلى هذه الخاصية إن كان الشكل السابق لا يستطيع المستخدم تحديد حجمه..

لك كل الشكر والتقدير..

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

:lol: شكرا لك..

نعم أستطعت تحريك الشكل ..

لك كل الشكر

ما شاء الله

حلو

بخصوص سؤالك الأول

هل من طريقة تجعل المستخدم هو من يحدد حجم الشكل بدلا من انعطيه قيم كـ LINE_WIDTH..؟

طبعاً وما المشكلة أختي

يمكنك اخذ قيمة طول الخط أو أي قيمة أخرى بالطريقة التي تناسبك

فمثلاً لو اردتي ان يدخلها المستخدم في textfield خاص بتحديد الطول فما المانع

ويمكنك استخدام الـ JOPtionPane لاخذ القيمة

وهنالك أكثر من طريقة جميع الخيارات متاحة لك

كما يمكنك اخذها عن طريق ضغطات الفأرة نفسها

فمثلاً عندما ينقر المستخدم النقرة الأولى تحفظين مكان نقطة النقر

وعندما ينقر المستخدم النقرة الثانية تحفظين مكان نقطة النقر

ثم تحسبي فارق المسافة بين النقطتين وتعتبريه هو الطول

فحسب رغبتك يمكن أن تحددي الطريقة التي تتناسب مع متطلبات برنامجك

وأما سؤالك الثاني

هل من طريقة سهلة.. لعمل ال Resize إلى الأشكال المرسومة..؟

نعم يمنكك ذلك

لكن كيف تريدين إتاحة هذه الميزة للمستخدم ؟

هل تريدين عمل ميزة سحب الشكل مثل ما هو الحال في الفوتوشوب مثلاً فيمكنك سحب الشكل بالاتجاه المطلوب فيتغير حجم الشكل تبعاً لحركة مؤشر الفأرة

يمكنك عمل ذلك وإن كان الكود سيكون أكثر تعقيداً مما لو كان المستخدم يغير الحجم عن طريق إدخال القيم من الكيبورد

لكن أظنك قادرة على عمل أي شيء تريدين فاعزمي على ما تريدين وإن احتجتي المساعدة فأنا وبقية الاخوة والاخوات هنا إن شاء الله سنكون خير معين لك

بالتوفيق

لا بد من صنعاء وان طال السفر

#17
san3aniJava كتب:

لكن أظنك قادرة على عمل أي شيء تريدين فاعزمي على ما تريدين وإن احتجتي المساعدة فأنا وبقية الاخوة والاخوات هنا إن شاء الله سنكون خير معين لك

بالتوفيق

لك كل الشكر.. :happy:

أصبحت المعنويات مرتفعة جداً..

san3aniJava كتب:

بخصوص سؤالك الأول

هل من طريقة تجعل المستخدم هو من يحدد حجم الشكل بدلا من انعطيه قيم كـ LINE_WIDTH..؟

طبعاً وما المشكلة أختي

يمكنك اخذ قيمة طول الخط أو أي قيمة أخرى بالطريقة التي تناسبك

فمثلاً لو اردتي ان يدخلها المستخدم في textfield خاص بتحديد الطول فما المانع

ويمكنك استخدام الـ JOPtionPane لاخذ القيمة

وهنالك أكثر من طريقة جميع الخيارات متاحة لك

كما يمكنك اخذها عن طريق ضغطات الفأرة نفسها

فمثلاً عندما ينقر المستخدم النقرة الأولى تحفظين مكان نقطة النقر

وعندما ينقر المستخدم النقرة الثانية تحفظين مكان نقطة النقر

ثم تحسبي فارق المسافة بين النقطتين وتعتبريه هو الطول

فحسب رغبتك يمكن أن تحددي الطريقة التي تتناسب مع متطلبات برنامجك

textfield و JOPtionPane .. حلول اضعها في نهاية القائمة..

جميع الأشكال استخدمت فيها (ضغطات الفأرة نفسها)

سأحاول الآن .. وسأوافيك بما يجري معي..

san3aniJava كتب:

وأما سؤالك الثاني

لكن كيف تريدين إتاحة هذه الميزة للمستخدم ؟

هل تريدين عمل ميزة سحب الشكل مثل ما هو الحال في الفوتوشوب مثلاً فيمكنك سحب الشكل بالاتجاه المطلوب فيتغير حجم الشكل تبعاً لحركة مؤشر الفأرة

يمكنك عمل ذلك وإن كان الكود سيكون أكثر تعقيداً مما لو كان المستخدم يغير الحجم عن طريق إدخال القيم من الكيبورد

اريد سحب الشكل كما في هذه الصورة..

resizablecomponent.png

هل تظن أن البرنامج سيكون جيدا.. إذا قمت باستخدام القيم عن طريق ال JOPtionPane >>؟

بالتوفيق :)

#18

أخي الكريم..

لم تنجح المحاولات.. حاولت سابقاً.. وقمت بتكرارها الآن..

استخدمت في رسم ال Line هذه الشيفرة .. وهي تعمل بأن يرسم المستخدم الخط من النقطة التي ضغط على بإستخدام الفأرة إلى النقطة التي يريد أن ينتهي بها.. لكن عندما اقوم بتطبيق ذلك على الشكل المطلوب لا يرسمه بشكل الصحيح..

أعتذر على الإزعاج..


public Line(Point start,Point last,Color color){
super(color);
position = start;
line = new Line2D.Double(origin, new Point(last.x - position.x,
last.y - position.y));
}

#19
Pink Lady كتب:

لك كل الشكر.. :happy:

أصبحت المعنويات مرتفعة جداً..

textfield و JOPtionPane .. حلول اضعها في نهاية القائمة..

جميع الأشكال استخدمت فيها (ضغطات الفأرة نفسها)

سأحاول الآن .. وسأوافيك بما يجري معي..

اريد سحب الشكل كما في هذه الصورة..

resizablecomponent.png

هل تظن أن البرنامج سيكون جيدا.. إذا قمت باستخدام القيم عن طريق ال JOPtionPane >>؟

بالتوفيق :)

اهلا اختي

فلتكن معنوياتك دائماً مرتفعة

وسؤالكم عن جودة البرنامج فيما لو استخدمتي الـ JOptionPane

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

وهذه هي الأمور التي من خلالها يمكن الجزم بأن الـ JOptionPane جيد او لا

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

فالفوتوشوف ولعله أقوى وأشهر محرر صور موجود على الساحة يتيح كل هذه الخيارت للإدخال

وهذه ميزات مهمة يحتاج الرسام أو المصمم

ففي حالات معينة قد يفضل المصمم تحديد حجم الشكل بالفأرة

لكن في حالات أخرى قد يفضل إدخالها يدويا

مثلاً لو أراد الوصول إلى دقة عالية في تحديد الحجم فم الصعب جدا استخدام الفأرة لذلك

وكذلك في الحواسب التي فأرتها متعبة في التحكم كبعض اللابتوبات

فبشكل عام تعدد خيارات وطرق الإدخال أفضل

على اية حال سنكون في انتظار محاولاتك

تحياتي

لا بد من صنعاء وان طال السفر

#20
Pink Lady كتب:

أخي الكريم..

لم تنجح المحاولات.. حاولت سابقاً.. وقمت بتكرارها الآن..

استخدمت في رسم ال Line هذه الشيفرة .. وهي تعمل بأن يرسم المستخدم الخط من النقطة التي ضغط على بإستخدام الفأرة إلى النقطة التي يريد أن ينتهي بها.. لكن عندما اقوم بتطبيق ذلك على الشكل المطلوب لا يرسمه بشكل الصحيح..

أعتذر على الإزعاج..


public Line(Point start,Point last,Color color){
super(color);
position = start;
line = new Line2D.Double(origin, new Point(last.x - position.x,
last.y - position.y));
}

لا بأس

هل لك بإرفاق الكود الذي يقوم برسم الشكل ككل حتى نتمكن من تحديد موضع الخلل في محاولتك

لا بد من صنعاء وان طال السفر

#21
san3aniJava كتب:

لا بأس

هل لك بإرفاق الكود الذي يقوم برسم الشكل ككل حتى نتمكن من تحديد موضع الخلل في محاولتك

حسناً..

فقط سأكمل ما تبقى من رسم الأشكال.. ربما تكون هنالك مشكلة أخرى لا سمح الله..

لك كل الشكر أخي..

يوماً موفقاً إن شاء الله..

#22
Pink Lady كتب:

حسناً..

فقط سأكمل ما تبقى من رسم الأشكال.. ربما تكون هنالك مشكلة أخرى لا سمح الله..

لك كل الشكر أخي..

يوماً موفقاً إن شاء الله..

وحاولي تفهمي هذا الكود أظنه سيفيدك

import java.awt.*;
import java.awt.event.*;
import java.awt.geom.Line2D;
import javax.swing.*;

public class Frametest extends JFrame {
	LinePanel linePanel = new LinePanel();
	Point startPoint = null;
	public static int LINE_X = 100;
	public static int LINE_Y = 100;
	boolean pressed = false;

	Frametest() {
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		initContentPane();
		pack();
		setLocationRelativeTo(null);
		setVisible(true);
	}

	private void initContentPane() {
		getContentPane().add(linePanel);
	}

	class LinePanel extends JPanel {
		// width of line
		private Stroke stroke = new BasicStroke(2.0f);
		private LineListener lis = null;

		LinePanel() {
			super();
			addMouseMotionListener(lis = new LineListener(this));
			addMouseListener(lis);
		}


		public void paintComponent(Graphics g) {
			super.paintComponent(g);
			Graphics2D g2 = (Graphics2D) g;
			g2.setStroke(stroke);
			g2.setColor(Color.RED);
			if (startPoint != null) {
				int x = startPoint.x;
				int y = startPoint.y;

				Point p1, p2,p3;
				p1= new Point( x + LINE_X, y);
				p2= new Point( x , y+ LINE_Y);
				p3= new Point( x + LINE_X, y + LINE_Y);

				Line2D line1 = new Line2D.Double(startPoint, p1);
				Line2D line2 = new Line2D.Double(startPoint, p2);
				Line2D line3 = new Line2D.Double(p2, p3);
				g2.draw(line1);
				g2.draw(line2);
				g2.draw(line3);
			}

		}


		// define panel's size

		public Dimension getPreferredSize() {
			return new Dimension(400, 350);
		}
	}

	class LineListener implements MouseMotionListener, MouseListener  {
		private JComponent parent = null;

		LineListener(JComponent parent) {
			this.parent = parent;
		}

		public void mouseClicked(MouseEvent e) {
		}

		public void mouseEntered(MouseEvent e) {

		}

		public void mouseExited(MouseEvent e) {

		}

		public void mousePressed(MouseEvent e) {
				startPoint = e.getPoint();
		}

		public void mouseReleased(MouseEvent e) {

		}

		public void mouseDragged(MouseEvent e) {
			// TODO Auto-generated method stub
			if(startPoint ==null)
				return;
			Point newPoint = e.getPoint();
			if(!startPoint.equals(newPoint))
			{

				LINE_X= newPoint.x -startPoint.x;
				LINE_Y= newPoint.y -startPoint.y;
			}
			parent.repaint();

		}

		public void mouseMoved(MouseEvent e) {

		}
	}

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

لا بد من صنعاء وان طال السفر

#23
san3aniJava كتب:

وحاولي تفهمي هذا الكود أظنه سيفيدك

وااااااااو .. :mellow:

مذهل جداً .. :blush:

رائع .. :P

سأحاول الآن تغير بعض أجزاءه ليتناسب مع برنامجي..

كل الشكر لك..

وفقك المولى لما يحبه ويرضاه..

#24

لم تنجح المحاولات.. تركت هذه الجزيئة.. وانتقلت إلى أخرى..

ظهرت لدي مشكلة.. في Font Dialog وهي عندما اقوم بتكبير حجم الخط.. يختفي كل شي في ال form عندما ما اقوم مرة اخرى بفتحها..

1. في البداية.. لا توجد أية مشاكل

729721673.png

2. عندما اقوم بتكبير الخط.. أيضاً لا توجد مشاكل..

671166007.png

3. عندما اقوم بفتح ال Form مرة أخرى بعد تكبير حجم الخط.. يختفى كل شي.. كما في الصورة..

404690945.png

المشكلة في ال Label الذي يحتوي على ال sample ..

على ما اعتقد.. فما هو الحل..؟!

#25
Pink Lady كتب:

لم تنجح المحاولات.. تركت هذه الجزيئة.. وانتقلت إلى أخرى..

ظهرت لدي مشكلة.. في Font Dialog وهي عندما اقوم بتكبير حجم الخط.. يختفي كل شي في ال form عندما ما اقوم مرة اخرى بفتحها..

1. في البداية.. لا توجد أية مشاكل

729721673.png

2. عندما اقوم بتكبير الخط.. أيضاً لا توجد مشاكل..

671166007.png

3. عندما اقوم بفتح ال Form مرة أخرى بعد تكبير حجم الخط.. يختفى كل شي.. كما في الصورة..

404690945.png

المشكلة في ال Label الذي يحتوي على ال sample ..

على ما اعتقد.. فما هو الحل..؟!

ما هي المحاولات التي لم تنجح أختي الطيبة ؟

أما بخصوص سؤالك التالي

فمن الصعب الجزم بسبب المشكلة دون رؤية كودك أو شفرتك

لكن بشكل استباقي أقول ربما

أنك لتكوين الـ ComboBox أو الـ List الخاصة بالخطوط واحجامها ونمطها تستخدمين متغيرات static ثم في وقت ما تغيرين قيم هذه المتغيرات

بالتوفيق أختي

لا بد من صنعاء وان طال السفر

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

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

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

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

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