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

أكثر من صورة

بدأه nice_angel88 في 27 أكتوبر 2010 · 15 رد · 639 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

أنا طالبة في طور تعلّم الجافا

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

تعلمت الأساسيات

كحركة الماوس والأشكال

وفي آخر مرة

تعلمت على اظهار صورة

أي صورة أضعها في مجلد المستندات

وتعلمت أيضا أمرا رائعا وهو جعلها تكبر تدريجيا

عن طريق تغيير إحداثيات x و y والطول والعرض طبعا

وكانت النتيجة جميلة

حاليا

أنا في حالة

أريد أن أظهر سلسلة من الصور بشكل متوالي

بحيث تظهر صورة مختلفة في كل مرة أضغط فيها الفأرة

وتظهر في موقع ضغط مؤشر الفأرة

وعندما أضغط وأظهر صورة ،، تختفي الصورة السابقة

كيف يمكن ربط موقع نقرة الماوس بإظهار الصورة ومن ثم الإنتقال إلى صورة أخرى ؟

أنا لا أريد الكود جاهزا

ولكن إخواني

أحتاج إلى فكرة الصّور بشكل واضح ومفهوم لإنسانة مبتدئة

و أسماء بعض الدوالّ لأتمكن من أداء مهمتي

وأي تنويه في ترتيب العمليات والدوالّ

قبل أن أعمل

repaint

،،

وما المفتاح ، في أن أتمكن من التنقل بين 6 صور مثلا ، بمجرد الضغط على الماوس ،

بحيث إذا تم عرض جميع الصور الموجودة في المجلد ،

أتمكن من عمل شيء

مثلا أكتب على الشاشة ( لم يتبق صور )

أو أقوم بآكشن معين أنا أختاره

لكن تنقصني الخبرة والأفكار

ممكن مساعدة بليز ؟

#2

http://stackoverflow.com/questions/2319665/java-move-image-with-mouse

قمت بترجمنها بما يناسب متطلباتك

استخدم ال JPanel ك كنفاس (Canvas) و ارسم الصورة عليه

استمع لحركة الفأرة (mouse move events) ، و ايضا استمع لنقرة الفأرة

عند النقر عليه(قم بتغيير الصورة حيث اجعلها تؤشر على الصورة التالية ثم) قم بأخذ احداثيات النقر و ابدأ بالرسم من هناك (سوف تظهر الصورة الى يمين المؤشر - في حالة ان اردت وضع منتصف الصورة على المؤشر قم بضرح منتصف طول و اعرض الصورة من الاحداثيات لتحصل على مركز الصورة)

لم اجرّب الحل لكنني متأكد بعض الشيء منه

#3

لظهور ال panel و اختفائه استخدم الدوال remove and add

00020309t.gif

1958_1963.gif
#4
.S.T.A.L.K.E.R كتب:

http://stackoverflow.com/questions/2319665/java-move-image-with-mouse

قمت بترجمنها بما يناسب متطلباتك

استخدم ال JPanel ك كنفاس (Canvas) و ارسم الصورة عليه

استمع لحركة الفأرة (mouse move events) ، و ايضا استمع لنقرة الفأرة

عند النقر عليه(قم بتغيير الصورة حيث اجعلها تؤشر على الصورة التالية ثم) قم بأخذ احداثيات النقر و ابدأ بالرسم من هناك (سوف تظهر الصورة الى يمين المؤشر - في حالة ان اردت وضع منتصف الصورة على المؤشر قم بضرح منتصف طول و اعرض الصورة من الاحداثيات لتحصل على مركز الصورة)

لم اجرّب الحل لكنني متأكد بعض الشيء منه

أنا فاهمة اني برسم على البانل

على كل حال

ممكن تكتبلي جزء من الكود

يوضح الطريقة

اللي من خلالها

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

وبعثها إلى ميثود أو دالة يعني تعمل display لصورة معينة في ذلك الموقع ؟؟

لو سمحت ، انا مضغوطة حاليا

وإذا كتبت الكود كلو بكون في قمة السعادة ،، يعني مرة واحدة بس وأنا رح أتابع أموري

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

تم تعديل هذه المشاركة بواسطة nice_angel88 في 27 أكتوبر 2010 في 18:18

#5

الموضوع دا انا رديت عليه امبارح wacko.gifwacko.gifwacko.gifwacko.gif

والرد ظهر قدامى ومش عارف راح فين unsure.gif

وكان الموضوع فى منتدى الـ JaveME

ولكن من خلال فهمى للاخت اجبتها على انه تبع منتدى الجافا العام

لكن مفيش مشكله الاخوه هنا قاموا بالواجب

يارب تكونى استفدتى

تم تعديل هذه المشاركة بواسطة Mahmoud Kelany في 27 أكتوبر 2010 في 18:49

Software Developer
Mahmoudkelany.com


 

#6

جربى هذا

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

/**
 *
 * @author Mahmoud Kelany
 */
public class IamgeFrameTest extends JFrame {

	static private Image backgroundImage;
	static int x;
	static int y;
	static String[] images = {"1.png", "2.png", "3.png"};
	static int count = 0;
	static IamgeFrameTest frameTest = new IamgeFrameTest();

	@Override
	public void paint(Graphics g) {
    	super.paint(g);
    	backgroundImage = new ImageIcon(getClass().getResource(images[count])).getImage();
    	g.drawImage(backgroundImage, x, y, null);
	}

	public static void main(String[] args) {
    	frameTest.setSize(600, 600);
    	frameTest.setMinimumSize(new Dimension(600, 600));
    	frameTest.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	frameTest.setVisible(true);
    	frameTest.addMouseListener(new MouseListener() {

        	public void mouseClicked(MouseEvent e) {
            	if (count == images.length - 1) {
                	count = 0;
            	} else {
                	count++;
            	}
            	x = e.getX();
            	y = e.getY();
            	frameTest.repaint();
        	}

        	public void mousePressed(MouseEvent e) {
        	}

        	public void mouseReleased(MouseEvent e) {
        	}

        	public void mouseEntered(MouseEvent e) {
        	}

        	public void mouseExited(MouseEvent e) {
        	}
    	});
	}
}

ولتحميل المشروع كاملا

من هنا

AddImageInLoaction.zip

بالتوفيق :)

Software Developer
Mahmoudkelany.com


 

#7

ربي يسلم إيدك

لكن أخي الكريم

alhnuf80cb3158e1.jpgzomup.gif

#8

حضرتك مستخدمها معاها Applet

انا عاملها على Frame عادى

وشغاله

حضرتك ممكن تشوفى الخطا فين فاستخدام الـ Applet

وكمان الخطا اللى عندك ClassCasteException

يعنى انتى بتعملى تحويل من Frame فى Applet تقريبا

وانا لم اتعامل مع الـ Applets

تم تعديل هذه المشاركة بواسطة Mahmoud Kelany في 27 أكتوبر 2010 في 21:49

Software Developer
Mahmoudkelany.com


 

#9

لك مني عظيم الشكر والإمتنان أخي

ممكن توضحلي لو سمحت ببعض التفصيل

أولا

backgroundImage = new ImageIcon(getClass().getResource(images[count])).getImage();

g.drawImage(backgroundImage, x, y, null);

ثانيا ..

كيف ممكن أجعل طول مجموعة الصور محددا ،، بحيث عندما يتم عرض 6 صور مثلا أو 8 لا يعود الكرار ويعرض من الأول

بل يقوم البرنامج بتشغيل ملف صوتي ؟

حاولت أعدل في الـ String[]

لكن طلعلي error

#10
backgroundImage = new ImageIcon(getClass().getResource(images[count])).getImage();
        g.drawImage(backgroundImage, x, y, null);

اول سطر يقوم بأختيار الصوره من الـ String اللى اسمه images لانها تعبر عن مسار الصور

السطر الثانى

يقوم برسم الصوره على الframe

الصوره هى backgroundImage

والـ x , y هى احداثيات رسم الصوره فى بدايه التشغيل تكون 0 و 0 وبالتالى الصوره ترسم اعلى يسار الشاشه

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

ازاى تجعلى بعد انتهاء الصور يعمل حدث معين

ليس التحكم فى الـ string ولكن التحكم فى الشرط الموجود فى اثناء الضغط

تحكمك يكون هنا

 public void mouseClicked(MouseEvent e) {
                if (count == images.length - 1) {
                        count = 0;
                } else {
                        count++;
                }
                x = e.getX();
                y = e.getY();
                frameTest.repaint();
                }

وبالتحديد فى هذه الجزئيه

   if (count == images.length - 1) {
                        count = 0;
                } else {
                        count++;
                }

هاقوله عندما يكون عدد الcount == images.length -1

هتعمل تشغيل الصوت او اى شىء تردين

غير ذلك

زود الـ count بواحد

الموضوع سهل ان شاء الله

بالتوفيق :)

Software Developer
Mahmoudkelany.com


 

#11

أخي الكريم

ينفع أستخدم التالي

Clip clickClip = AudioSystem.getClip(); 
URL clipURL = new URL("file://C:/aFile.wav"); 
AudioInputStream ais = AudioSystem.getAudioInputStream(clipURL); 
clickClip.open(ais); 
clickClip.start();

لكي أشغل الصوت ؟ بحيث أضعو في الـ If statement الخاصة بي ؟

وإذا كان نعم ،،

هل يجب أن أعمل import لشيء ما ؟

#12

اولا اختى الكريمه

يجب فتح موضوع بكل سوال جديد

حتى لا يتم اغلاق الموضوع ولا يستفيد منه احد بعد ذلك

ثانيا

على حسب ذاكرتى ان هذا الكود صحيح لانى كما قولت لك قبل ذلك لم اتعامل مع Applets

لكن شاهدت هذا الكود من قبل

الـimport المطلوبه

دا الكود بالـ imports وبالـ try..catch المطلوبه

import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.UnsupportedAudioFileException;
import java.net.URL;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;


 AudioInputStream ais = null;
    	try {
        	Clip clickClip = AudioSystem.getClip();
        	URL clipURL = new URL("file://C:/aFile.wav");
        	ais = AudioSystem.getAudioInputStream(clipURL);
        	clickClip.open(ais);
        	clickClip.start();
    	} catch (UnsupportedAudioFileException ex) {
        	Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
    	} catch (IOException ex) {
        	Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
    	} catch (LineUnavailableException ex) {
        	Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
    	} finally {
        	try {
            	ais.close();
        	} catch (IOException ex) {
            	Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
        	}
    	}

Software Developer
Mahmoudkelany.com


 

#13

ربي يسلم أناملك

بس أنا جربتها مع ملف

wav

والنتيجة

597437300.jpg

#14

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

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

import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.UnsupportedAudioFileException;
import java.net.URL;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;


 AudioInputStream ais = null;
        try {
                Clip clickClip = AudioSystem.getClip();
                URL clipURL = new URL("file://C:/aFile.wav");
                ais = AudioSystem.getAudioInputStream(clipURL);
                clickClip.open(ais);
                clickClip.start();
        } catch (UnsupportedAudioFileException ex) {

        } catch (IOException ex) {

        } catch (LineUnavailableException ex) {

        } finally {
                try {
                ais.close();
                } catch (IOException ex) {

                }
        }

Software Developer
Mahmoudkelany.com


 

#15

انا غلبتك معي كثير

آخر محاولة حابة أعرض عليك الـ error

وإذا ما زبط خلص ما في مشكلة

بيكفي والله يكتر خيرك

،،

وحاليا البرنامج بيعمل

compile and run

المشكلة لما يوصل البرنامج لتشغيل الصوت بيعلق

وبتطلع النافذة

qyL00781.jpg

#16

فيه عندك كائن بـ null فبالتالى ظهر لك NullPointerException

راجعى الكود بتاعك تانى

وان شاء الله بتلاقى الحل

Software Developer
Mahmoudkelany.com


 

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