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

سحب وإسقاط الملفات في الجافا

بدأه elwaly في 27 أغسطس 2010 · 13 رد · 736 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

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

وأضعه فى التطبيق فى مكان معين وليكن فى الوسط يشغل تطبيق الجافا الملف

ثانيا كيف اجعل مشغل الصوتيات الخاص بى المصنوع بالجافا افتراضى أى كيف أضع لتطبيقى خيار فى قوائم الويندوز بحيث أن اضغط right click على الملف الصوتى يكون هناك خيار

فى قائمة الويندوز وليكن اسمه play with JavaMediaPlayer اعتقد أن هذا يكون من خلال الكود أليس كذلك.

#2

لنفترض أن عملية ال drop تتم في كائن JPanel

أولا تحدد أن ال JPanel سيتلقى عمليات ال drop باستعمال الطريقة setDropTarget. هذه الطريقة تنتظر كائنا من صنف DropTarget

ثم تقوم بعمل override للطريقة drop الموجودة داخل الفئة DropTarget، حتى تسترجع ما تم وضعه داخل ال JPanel

	jPanel1.setDropTarget(new DropTarget() {

		@Override
		public synchronized void drop(DropTargetDropEvent dtde) {
			try {
				dtde.acceptDrop(DnDConstants.ACTION_COPY);
				Transferable trs = dtde.getTransferable();
				String transfertData = trs.getTransferData(DataFlavor.stringFlavor).toString();
				System.out.println(transfertData);
			} catch (UnsupportedFlavorException ex) {
				ex.printStackTrace();
			} catch (IOException ex) {
				ex.printStackTrace();
			}
		}

	});

عندما تلصق ملفا داخل ال panel، ستتم طباعة مساره. يعني لديك مسار الملف، إعمل به ما تشاء.

عند عمل drag & drop لملف، فإن ما يتم نقله هو المسار، هذا في لينوكس. لا أدري ما هو التصرف في windows، لذلك يمكن أن تحصل على خطأ في الwindows إذا ما كان يتم نقله شيء آخر غير المسار

1
#3
اقتباس
ثانيا كيف اجعل مشغل الصوتيات الخاص بى المصنوع بالجافا افتراضى أى كيف أضع لتطبيقى خيار فى قوائم الويندوز بحيث أن اضغط right click على الملف الصوتى يكون هناك خيار

فى قائمة الويندوز وليكن اسمه play with JavaMediaPlayer اعتقد أن هذا يكون من خلال الكود أليس كذلك.

شاهد الرابط التالي:

http://java.sun.com/developer/technicalArticles/J2SE/Desktop/jdic_assoc/

====

ارجو فصل الاسئلة مرة اخرى

ارجو عدم دمج اكثر من سؤال في نفس المشاركة، لكي تتم المناقشة في موضوع محدد :)

#4

أخى ان شاء الله أفعل ولا أضع سؤالين فى مشاركة واحدة

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

أى عندما اضغط على ملف الصوت فانه اظن يعطينى خطأ او يشغل برنامجى فقط بدون تشغيل الصوت

فكيف يكون اعطاء parameter للكلاس بحيث يأتينى بالمسار لهذا الملف الذى ضغط عليه

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

أما فى هذه الحالة فكيف.

#5

صراحة لم أفهم شيئا blink.gif

السؤال بخصوص ماذا بالضبط؟ ال drag & drop أم قائمة ال windows؟؟

قليل من الكود لن يضر

#6

أولا أنا اتأسف ما حددت السؤال بخصوص أى موضوع

ثانيا بالنسبة لموضوع drag&drop فأنا طبقت الكود الذى الذى أسلفت ولكن حدث Eception

java.awt.datatransfer.UnsupportedFlavorException: Unicode String

فى أى ملف اسحبه للpanel

ثانيا بالنسبة لموضوع الويندوز انا اريد أن افهم انا لتشغيل الملف اضغط open ثم اختار الملف المراد فيأخذ البرنامج مسار الملف الصوتى ويشغله

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

نحن انتهينا من جعل البرنامج افتراضى فاصبح عند الضغط على ملف mp3 مثلا يظهر البرنامج ولكن لا يشغل الصوت أليس كذلك

هذا قصدى .

#7

ليس لدي windows لكي أغرف سبب الخطأ في drag & drop

#8

السلام عليكم

لقد جربت الكود الذي و ضعه عصام

ولم يعمل سوى على تقبل نقل النصوص و ليس الملفات

و جربت هذا الكود و عمل لدي (Win 7)

تستطيع من خلاله سحب و رمي اكثر من ملف بنفس الوقت :)

panel1.setDropTarget(new DropTarget() {

            @Override
            public synchronized void drop(DropTargetDropEvent event) {
                try {
                    Transferable trs = event.getTransferable();
                    if (trs.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
                        event.acceptDrop(event.getDropAction());

                        List list = (List) trs.getTransferData(DataFlavor.javaFileListFlavor);
                        Iterator it = list.iterator();
                        while (it.hasNext()) {
                            System.out.println(it.next());
                        }
                        event.dropComplete(true);
                    } else {
                        event.rejectDrop();
                    }
                } catch (UnsupportedFlavorException ex) {
                    ex.printStackTrace();
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
            }
        });

بالتوفيق

2
#9

آسف أخى بالنسبة بخصوص السؤال الثانى

اقتباس
ثانيا بالنسبة لموضوع الويندوز انا اريد أن افهم انا لتشغيل الملف اضغط open ثم اختار الملف المراد فيأخذ البرنامج مسار الملف الصوتى ويشغله

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

نحن انتهينا من جعل البرنامج افتراضى فاصبح عند الضغط على ملف mp3 مثلا يظهر البرنامج ولكن لا يشغل الصوت أليس كذلك

هذا قصدى .

#10
elwaly كتب:

آسف أخى بالنسبة بخصوص السؤال الثانى

ما رأيك ان تقتح مشاركة جديدة فيه

لكي يشارك معك الاخرون بتجربتك

لان عنوان الموضع الحالي يتحدث عن شيء اخر عن سؤالك الثاني

دمتم سالمين :)

#11

عصام هل يمكنك فحص الشيفرة التي وضعها محمد على نظام linux

حتى نتأكد أن لدينا نسخة تعمل على النظامين بشكل واحد

لماذا لا تسمي الموضوع باللغة العربية؟

ولنقل سحب وتشغيل الملفات في برنامج جافا

تحياتي

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

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

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

728x90.png

#12

لا، الطريقة isDataFlavorSupported تعيد false بالنسبة ل javaFileListFlavor، في لينوكس طبعا.

تم تعديل هذه المشاركة بواسطة herch في 29 أغسطس 2010 في 05:11

#13

طيب ما الحل؟

كيف يمكننا الجمع بين الطريقتين في آن واحد

هل نقوم بوضع الشيفرة الخاصة بك في else الخاصة بمحمد؟

أم أن هذا قد يخلق مشكلة لدى أنظمة أخرى غير windows و Linux

تحياتي

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

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

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

728x90.png

#14
علاء الصالحي كتب:

طيب ما الحل؟

كيف يمكننا الجمع بين الطريقتين في آن واحد

هل نقوم بوضع الشيفرة الخاصة بك في else الخاصة بمحمد؟

أم أن هذا قد يخلق مشكلة لدى أنظمة أخرى غير windows و Linux

تحياتي

ييدو أن ذلك هو الحل الوحيد wink.gif

هذه طريقة أخرى بالنسبة للLinux، لكن لم أجربها http://stackoverflow.com/questions/811248/how-can-i-use-drag-and-drop-in-swing-to-get-file-path

1

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