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

[تنبيه - عنوان غير مناسب : ]مشكلة فى ال MouseListener

بدأه mr.beshoy في 28 مارس 2010 · 9 رد · 622 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

هنا أريد رسم دائرة فى مكان ما و تم عمل هذه الجزئية ، و أريد أيضاً عندما أضغط بال mouse فى مكان آخر يتم رسم نفس الدائرة بحجمها و ارتفعها فى المكان الجديد

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

جربت أكثر من طريقة و لكن لم تُحل المشكلة

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

public class TestMoveOval extends JFrame {

    private DrawOval drawOval;

    public TestMoveOval() {
        drawOval = new DrawOval();
        getContentPane().add(drawOval);
    }

    public static void main(String[] args) {
        TestMoveOval testMoveOval = new TestMoveOval();
        testMoveOval.setDefaultCloseOperation(TestMoveOval.EXIT_ON_CLOSE);
        testMoveOval.setSize(new Dimension(600, 300));
        testMoveOval.setLocationRelativeTo(null);
        testMoveOval.setVisible(true);

    }
}
-----------------------------------------------------------------------------------------------------
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JPanel;

class DrawOval extends JPanel {

    private int oval_x = 150, oval_y = 50, oval_width = 200, oval_height = 100;
    private MyMouse myMouse;
    // private Graphics2D g2d;

    public DrawOval() {
        myMouse = new MyMouse();
        addMouseListener(myMouse);
        addMouseMotionListener(myMouse);
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.setColor(Color.BLUE);
        Graphics2D g2d = (Graphics2D) g;
        g2d.fillOval(oval_x, oval_y, oval_width, oval_height);

    }

    private class MyMouse extends MouseAdapter {

        int x, y, x1;

        @Override
        public void mousePressed(MouseEvent e) {
            super.mousePressed(e);
            x = e.getX();
            y = e.getY();
            repaint();
        }

        @Override
        public void mouseReleased(MouseEvent e) {
        }
    }
}

شكراً

#2

في الطريقة mousePressed يجب أن تقوم بتحديث إحداثيات الرسم أي oval_x و oval_y

public void mousePressed(MouseEvent e) {
            super.mousePressed(e);
            oval_x = e.getX();
            oval_y = e.getY();
            repaint();
        }

تم تعديل هذه المشاركة بواسطة علاء الصالحي في 28 مارس 2010 في 06:35 — السبب: إضافة الوسم code

#3

الأخ الكريم/الأخت الكريمة

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

مرحباً بكم في منتدى الفريق العربي للبرمجة

نود تنبيهك أن العنوان غير مناسب.

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

وفي حال التكرار سيتعرض موضوعك للإغلاق والحذف!!!

قواعد المشاركة

/index.php?showtopic=29343

شاكرين لكم حُسن تعاونكم

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

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

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

728x90.png

#4

معلش يا أخ علاء على الخطأ هذا ..

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

بالنسبة

اقتباس
لتحديث إحداثيات الرسم أي oval_x و oval_y

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

فى حين إننا بناخذا قيمة x , y فى كل ضغطة فالمفروض يتم رسمها فى المكان السليم و لكن لا أعرف لماذا لم تُرسم ؟؟!!!

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JPanel;

class DrawOval extends JPanel {

    private int oval_x = 150, oval_y = 50, oval_width = 200, oval_height = 100;
    private MyMouse myMouse;
    // private Graphics2D g2d;

    public DrawOval() {
        myMouse = new MyMouse();
        addMouseListener(myMouse);
        addMouseMotionListener(myMouse);
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.setColor(Color.BLUE);
        Graphics2D g2d = (Graphics2D) g;
        g2d.fillOval(oval_x, oval_y, oval_width, oval_height);

    }

    private class MyMouse extends MouseAdapter {

        int x, y, x1;

        @Override
        public void mousePressed(MouseEvent e) {
            super.mousePressed(e);
            oval_x = e.getX();
            oval_x = e.getY();
            repaint();
        }

        @Override
        public void mouseReleased(MouseEvent e) {
        }
    }
}

الكود مرفق .

شكراً

MoveOval.rar

#5

طبيعي، لأن الإحداثيات هنا هي إحداثيات الزاوية اليسارية العليا ويجب أن تعمل إزاحة لكي ترسم الدائرة في الوسط تماما(أي يكون الـ Cursor في الوسط)..

الإزاحة بمقدار - oval_width/2 أفقيا، و - oval_height/2 عامودياً.

تم تعديل هذه المشاركة بواسطة JDurrah في 28 مارس 2010 في 07:00

#6

لو تسمح توضح إجابتك شوية بالكود ...مش فاهمك كويس

شكراً

#7

أنا عندما أرسم أي Component يتم الرسم ابتداء من النقطة المحددة نحو الأسفل واليسار (في كل اللغات)..

oval_x = e.getX() - oval_width/2

oval_y = e.getY()- oval_height/2

أنقصنا المقدار1 لكي ترسم الدائرة إلى ناحية اليسار من المؤشر، والمقدار 2 لكي ترسم الدائرة إلى الأعلى قليلا من المؤشر(ليس قليلا بل بمقدار نصف قطر الدائرة إن صح التعبير)... وبهذا تصبح نقطة الرسم في مركز الدائرة تماما.

تم تعديل هذه المشاركة بواسطة JDurrah في 28 مارس 2010 في 07:08

#8

فهمت لحد ما النظرية ماشية كيف

معلش ليا تساؤل أنا فى الأمور هذه معلوماتى مش تمام .... ممكن تدلنى على مصدر موضع و شارح هذه المفاهيم الرياضية ؟؟

شكراً جزيلاً لتعبكم

تم تعديل هذه المشاركة بواسطة mr.beshoy في 28 مارس 2010 في 07:16

#9

Search for Java2D programming

#10

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

أنا عاوز شئ يكون موضح الرياضة الخاصة بهذه الأمور

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

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

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

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

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