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

مشكلة بالسؤال بعد تنفيذ البرنامج !

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

السلام عليكم

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

كلشي تمام بالسؤال الا انه لما بنفذه و بضغط على البتون بيعطي ايرور و ما بيرسم اشي !!!

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

و مشكورين :)

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

public class Main {


    public static void main(String[] args) {
       myframe mf=new myframe();
       mf.setDefaultCloseOperation(mf.DO_NOTHING_ON_CLOSE);
       mf.setVisible(true);
       exit e=new exit(mf);
       mf.addWindowListener(e);
    }

}


class myframe extends JFrame{
    public myframe(){
        setTitle("shape");
        setSize(300,300);
        panel p=new panel();
        add(p);

    }
}

class panel extends JPanel{

    JButton b1;
    JButton b2;
    JButton b3;
    public panel(){
        b1=new JButton("line");
        b2=new JButton("rectangle");
        b3=new JButton("oval");
        add(b1);
        add(b2);
        add(b3);
        mylistener l1=new mylistener();
        mylistener l2=new mylistener();
        mylistener l3=new mylistener();
        b1.addActionListener(l1);
        b2.addActionListener(l2);
        b3.addActionListener(l3);
    }



    private class mylistener implements ActionListener{
        public Graphics d  ;
        public void actionPerformed(ActionEvent e){
          if (e.getSource()==b1)
         {
             d.drawLine(10,10,10,10);
             //  repaint();
          }

           else if(e.getSource()==b2){
            for(int i=0;i<10;i++)
                d.drawRect(50+10*i,50+10*i,50+10*i,50+10*i); 
            //  repaint();
           }

           else if(e.getSource()==b3){
            for(int i=0;i<10;i++)
                d.drawOval(50+10*i,50+10*i,50+10*i,50+10*i); 
             // repaint();
           }

    }
    }

}





class exit extends WindowAdapter{
    public exit(JFrame f){
        frame=f;
    }
    public void windowClosing(WindowEvent e){
        int x=JOptionPane.showConfirmDialog(frame,"do you wont to exit","exit",JOptionPane.OK_CANCEL_OPTION,JOptionPane.WARNING_MESSAGE);
        if(x==JOptionPane.OK_OPTION)
            System.exit(0);
        else
           frame.setLocation(0,0); 
    }
    private JFrame frame;
}

تم تعديل هذه المشاركة بواسطة صمت الفراشات في 12 أبريل 2011 في 17:25

#2

غيري:

e.getSource()==b1

إلى :

e.getSource()=="line"

عفواً أحبتي انقطاعي بسبب الدراسة دعواتكم بالتوفيق..

{ لا ينال العلم مستحٍ ولا مستكبر }

#3
JavaPorgrammer كتب:

غيري:

e.getSource()==b1

إلى :

e.getSource()=="line"

لا تفرق اخى الكريم

لان المشكله فى الكائن الخاص بالـGraphices

يمكنك حل هذه المشكله

بكتابه هذا السطر

d = getGraphics();

بعد تعريف الداله الاكشن هكذا

    	public void actionPerformed(ActionEvent e) {
        	d = getGraphics();

بالتوفيق

Software Developer
Mahmoudkelany.com


 

#4

مشكورين يا اخوان

بعد التعديلات زبطت و الحمد لله

بس المشكلة انه صارت تظهر عندي الرسمات فوق بعض !!

تم تعديل هذه المشاركة بواسطة صمت الفراشات في 12 أبريل 2011 في 21:04

#5
صمت الفراشات كتب:

مشكورين يا اخوان

بعد التعديلات زبطت و الحمد لله

بس المشكلة انه صارت تظهر عندي الرسمات فوق بعض !!

اختى الكريمه المشكله كانت عندك فى الكود وانا عرضت عليكى الحل

وهذه صوره للتشغيل بعد الضغط على الزراير بالترتيب

post-217802-012437300 1302631552_thumb.p

وهذا هو الكود بعد التعديل

اللى عدلته عليه هو كما ذكرت لكى وطول الخط فقط لانه كان صغير جدا كان لا يظهر

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

public class Main {

	public static void main(String[] args) {
    	myframe mf = new myframe();
    	mf.setDefaultCloseOperation(mf.DO_NOTHING_ON_CLOSE);
    	mf.setVisible(true);
    	exit e = new exit(mf);
    	mf.addWindowListener(e);
	}
}

class myframe extends JFrame {

	public myframe() {
    	setTitle("shape");
    	setSize(300, 300);
    	panel p = new panel();
    	add(p);

	}
}

class panel extends JPanel {

	JButton b1;
	JButton b2;
	JButton b3;

	public panel() {
    	b1 = new JButton("line");
    	b2 = new JButton("rectangle");
    	b3 = new JButton("oval");
    	add(b1);
    	add(b2);
    	add(b3);
    	mylistener l1 = new mylistener();
    	mylistener l2 = new mylistener();
    	mylistener l3 = new mylistener();
    	b1.addActionListener(l1);
    	b2.addActionListener(l2);
    	b3.addActionListener(l3);
	}

	private class mylistener implements ActionListener {

    	public Graphics d;

    	public void actionPerformed(ActionEvent e) {
        	d = getGraphics();
        	if (e.getSource() == b1) {
            	d.drawLine(10, 10, 100, 100);
            	//  repaint();
        	} else if (e.getSource() == b2) {
            	for (int i = 0; i < 10; i++) {
                	d.drawRect(50 + 10 * i, 50 + 10 * i, 50 + 10 * i, 50 + 10 * i);
            	}
            	//  repaint();
        	} else if (e.getSource() == b3) {
            	for (int i = 0; i < 10; i++) {
                	d.drawOval(50 + 10 * i, 50 + 10 * i, 50 + 10 * i, 50 + 10 * i);
            	}
            	// repaint();
        	}
    	}
	}
}

class exit extends WindowAdapter {

	public exit(JFrame f) {
    	frame = f;
	}

	public void windowClosing(WindowEvent e) {
    	int x = JOptionPane.showConfirmDialog(frame, "do you wont to exit", "exit", JOptionPane.OK_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE);
    	if (x == JOptionPane.OK_OPTION) {
        	System.exit(0);
    	} else {
        	frame.setLocation(0, 0);
    	}
	}
	private JFrame frame;
}
المرفقات
painting.png

Software Developer
Mahmoudkelany.com


 

#6

مهي هذه المشكلة !

الدكتور مرة عرض علينا حل بانه فنكشن ال repaint()

بس مش عارفة وين لازم استتخدمه ،، عم بحاول حاليا فيه و ان شاء الله رح يزبط

غلبتكم معي :lol:

#7

مشكله ايه ؟؟؟؟؟؟؟ بالظبط

ان التلاته يترسموا مع بعض ؟ ولا ايه ؟؟

حددى المشكله

المشكله الاولى انه كان عند الرسم يظهر خطأ

لكن دلوقتى مشكلتك غير مفهومه

Software Developer
Mahmoudkelany.com


 

#8
Mahmoud Kelany كتب:

مشكله ايه ؟؟؟؟؟؟؟ بالظبط

ان التلاته يترسموا مع بعض ؟ ولا ايه ؟؟

حددى المشكله

المشكله الاولى انه كان عند الرسم يظهر خطأ

لكن دلوقتى مشكلتك غير مفهومه

المشكلة الاولى كانت انه ما يكون رسم أصلا ، و بعد ما عملت التعديل الي حكيت عنه زبط

بس المشكلة هلحين هي انه بيرتسمو فوق بعض ،، و الحل انه نستخدم فنكشن ال repaint بس ما بعرف وين لازم استعمله

ان شاء الله تكون المشكلة اتضحت الان :lol:

#9

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

بحسب معلوماتي ، حتى يتم الرسم ينبغي ان نقوم بعمل override للميثود paint ... هذه الطريق الوحيده التي اعرفها للرسم .. و ارجوا تصحيحي ان كنت مخطئة ...

و بالتالي اقترح عليكي حل مختلف سوف يحقق بالضبط الشيء الذي تريده ، و هو عمل override للميثود paintComponent و ايضا إستخدام مفهوم الـ Inner Classes حتى لا يكون لديكي كلاس اخر من اجل

تطبيق الـ listener ...

هذا هو الكود الذي اقترحه عليكي:

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

public class Main {

    public static void main(String[] args) {
        myframe mf = new myframe();
        mf.setDefaultCloseOperation(mf.DO_NOTHING_ON_CLOSE);
        mf.setVisible(true);
        exit e = new exit(mf);
        mf.addWindowListener(e);
    }
}

class myframe extends JFrame {

    public myframe() {
        setTitle("shape");
        setSize(300, 300);
        panel p = new panel();
        add(p);
    }
}

class panel extends JPanel {

    JButton b1;
    JButton b2;
    JButton b3;
    int shape;

    public panel() {
        b1 = new JButton("line");
        b2 = new JButton("rectangle");
        b3 = new JButton("oval");
        add(b1);
        add(b2);
        add(b3);

        b1.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                shape = 1;
                repaint();
            }
        });

        b2.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                shape = 2;
                repaint();
            }
        });

        b3.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                shape = 3;
                repaint();
            }
        });
    }

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

        if (shape == 1) {
            g.drawLine(100, 100, 200, 200);
        } else if (shape == 2) {
            for (int i = 0; i < 10; i++) {
                g.drawRect(50 + 10 * i, 50 + 10 * i, 50 + 10 * i, 50 + 10 * i);
            }
            repaint();
        } else if (shape == 3) {
            for (int i = 0; i < 10; i++) {
                g.drawOval(50 + 10 * i, 50 + 10 * i, 50 + 10 * i, 50 + 10 * i);
            }
            repaint();

        }
    }
}

class exit extends WindowAdapter {

    public exit(JFrame f) {
        frame = f;
    }

    public void windowClosing(WindowEvent e) {
        int x = JOptionPane.showConfirmDialog(frame, "do you wont to exit", "exit", JOptionPane.OK_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE);
        if (x == JOptionPane.OK_OPTION) {
            System.exit(0);
        } else {
            frame.setLocation(0, 0);
        }
    }
    private JFrame frame;
}

و هذا هو الملف الكود:

Main.java

بالتوفيق

2

لا اله الا الله .. محمد رسول الله

(* ربِ اجعلني مقيم الصلاة و من ذريتي ، ربنا و تقبل دعـاء *)

يا حيّ يا قيـوم ... برحمتك استغيث ... اصلح لي شأني كله و لا تكلني الى نفسي طرفة عين

#10

يسلمو كثير بنت اليمن ،، الكود بنفذ الشيء المطلوب ،،

و شكرا للاخوان الي ساعدوني كمان :)

#11

العفو اختي الكريمة و مشكور ايضا اخي محمود ... ردك اضاف لي معلومة ... و انا اسفه ، وضعت ردي قبل ان الاحظ انك وضعت رد ..

بالتوفيق للجميع.

تم تعديل هذه المشاركة بواسطة بنت اليمن في 12 أبريل 2011 في 21:42

لا اله الا الله .. محمد رسول الله

(* ربِ اجعلني مقيم الصلاة و من ذريتي ، ربنا و تقبل دعـاء *)

يا حيّ يا قيـوم ... برحمتك استغيث ... اصلح لي شأني كله و لا تكلني الى نفسي طرفة عين

#12

طبعا كلام الاخت بنت اليمن سليم 100 %

وهذا هو الصح

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

فقط اضافه داله واحده

paint(d);

وهذا هو الكود

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

public class Main {

	public static void main(String[] args) {
    	myframe mf = new myframe();
    	mf.setDefaultCloseOperation(mf.DO_NOTHING_ON_CLOSE);
    	mf.setVisible(true);
    	exit e = new exit(mf);
    	mf.addWindowListener(e);
	}
}

class myframe extends JFrame {

	public myframe() {
    	setTitle("shape");
    	setSize(300, 300);
    	panel p = new panel();
    	add(p);

	}
}

class panel extends JPanel {

	JButton b1;
	JButton b2;
	JButton b3;

	public panel() {
    	b1 = new JButton("line");
    	b2 = new JButton("rectangle");
    	b3 = new JButton("oval");
    	add(b1);
    	add(b2);
    	add(b3);
    	mylistener l1 = new mylistener();
    	mylistener l2 = new mylistener();
    	mylistener l3 = new mylistener();
    	b1.addActionListener(l1);
    	b2.addActionListener(l2);
    	b3.addActionListener(l3);
	}

	private class mylistener implements ActionListener {

    	public Graphics d;

    	public void actionPerformed(ActionEvent e) {
        	d = getGraphics();
        	paint(d);
        	if (e.getSource() == b1) {
            	d.drawLine(10, 10, 100, 100);
        	} else if (e.getSource() == b2) {
            	for (int i = 0; i < 10; i++) {
                	d.drawRect(50 + 10 * i, 50 + 10 * i, 50 + 10 * i, 50 + 10 * i);
            	}
        	} else if (e.getSource() == b3) {
            	for (int i = 0; i < 10; i++) {
                	d.drawOval(50 + 10 * i, 50 + 10 * i, 50 + 10 * i, 50 + 10 * i);
            	}
        	}
    	}
	}
}

class exit extends WindowAdapter {

	public exit(JFrame f) {
    	frame = f;
	}

	public void windowClosing(WindowEvent e) {
    	int x = JOptionPane.showConfirmDialog(frame, "do you wont to exit", "exit", JOptionPane.OK_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE);
    	if (x == JOptionPane.OK_OPTION) {
        	System.exit(0);
    	} else {
        	frame.setLocation(0, 0);
    	}
	}
	private JFrame frame;
}

بالتوفيق ان شاء الله

بنت اليمن كتب:

العفو اختي الكريمة و مشكور ايضا اخي محمود ... ردك اضاف لي معلومة ... و انا اسفه ، وضعت ردي قبل ان الاحظ انك وضعت رد ..

بالتوفيق للجميع.

لالا طبعا , دا انتى منورانا اختى الكريمه

وجزاكم الله كل خير :)

Software Developer
Mahmoudkelany.com


 

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