تعلم JavaFx ..مقال36_ التعامل مع الميديا Media with JavaFX
صفحة 1 من اصل 1 • شاطر
تعلم JavaFx ..مقال36_ التعامل مع الميديا Media with JavaFX
أهلا بكم
توفر الـــ [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] واجهة برمجة التطبيقات JavaFX Media API التي تمكن المستخدمين من دمج و تشغيل ملفات الصوت والفيديو في التطبيقات ويدعم أيضا تدفق HTTP المباشر لملفات الوسائط الثابتة والخلاصات المباشرة.
يتم دعم عدد من تنسيقات الوسائط ، بما في ذلك AAC و AIFF و WAV و MP3. كما يتم دعم FLV التي تحتوي على VP6 video و MP3 audio و الوسائط المتعددة MPEG-4 مع تنسيقات الفيديو H.264 / AVC.
يعتمد دعم تنسيق وسائط معين على النظام الأساسي للتطبيق فبعض ميزات تشغيل الوسائط وتنسيقاتها لا تتطلب أي عمليات تركيب إضافية ؛ والبعض الاخر تتطلب برنامج طرف ثالث ليتم تثبيتها.
في هذا المقال التعليمي ، سنناقش قدرة [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] على التعامل مع ملفات الوسائط بطريقة تفاعلية. حيث إنها توفر الحزمة javafx.scene.media التي تحتوي على جميع الفئات الضرورية للتعامل مع الميديا وهي على النحو التالى :
javafx.scene.media.AudioClip
javafx.scene.media.Media
javafx.scene.media.MediaPlayer
javafx.scene.media.MediaStatus
javafx.scene.media.MediaView
3_بإنشاء فئة جديدة من الفئة [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] ليمثل كائن تشغيل الملف الصوتي ثم تمرير مسار الملف الية :
كما رايتك فى الشفرة اعلاه توفر فئة AudioClip مُنشئًا واحدًا فقط يأخذ عنوان URL في نموذج السلسلة ، وهو عنوان URL لمصدر الصوت. يتم تحميل مقطع الصوت على الفور في الذاكرة في شكل خام غير مضغوط. هذا هو السبب وراء عدم استخدام هذه الفئة لمقاطع الصوت الطويلة.
يمكن أن يستخدم عنوان URL المصدر بروتوكولات HTTP و file و JAR. هذا يعني أنه يمكنك تشغيل مقطع صوتي من الإنترنت أونظام الملفات المحلي أوملف JAR.
الطريقة play هى المسؤلة عن تشغيل الملف الصوتي ولها ثلاث مشيدات على النحو التالى :
المعلمات:
خصائص التشغيل :
تدعم فئة AudioClip ضبط بعض خصائص الصوت عند تشغيل المقطع الصوتي وهي على النحو التالى :
الخاصية cycleCount : تلك الخاصية تحدد عدد مرات تشغيل الملف عندما يتم استدعاء طريقة play() ..القيمة الافتراضية هي 1 معني ذلك ان يتم تشغيل الملف لمرة واحدة فقط ...ويتم استخدام تلك الخاصية على النحو التالى :
حيث count عدد مرات التشغيل التى تريد تنفيذها
توفر الـــ [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] واجهة برمجة التطبيقات JavaFX Media API التي تمكن المستخدمين من دمج و تشغيل ملفات الصوت والفيديو في التطبيقات ويدعم أيضا تدفق HTTP المباشر لملفات الوسائط الثابتة والخلاصات المباشرة.
يتم دعم عدد من تنسيقات الوسائط ، بما في ذلك AAC و AIFF و WAV و MP3. كما يتم دعم FLV التي تحتوي على VP6 video و MP3 audio و الوسائط المتعددة MPEG-4 مع تنسيقات الفيديو H.264 / AVC.
يعتمد دعم تنسيق وسائط معين على النظام الأساسي للتطبيق فبعض ميزات تشغيل الوسائط وتنسيقاتها لا تتطلب أي عمليات تركيب إضافية ؛ والبعض الاخر تتطلب برنامج طرف ثالث ليتم تثبيتها.
في هذا المقال التعليمي ، سنناقش قدرة [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] على التعامل مع ملفات الوسائط بطريقة تفاعلية. حيث إنها توفر الحزمة javafx.scene.media التي تحتوي على جميع الفئات الضرورية للتعامل مع الميديا وهي على النحو التالى :
javafx.scene.media.AudioClip
javafx.scene.media.Media
javafx.scene.media.MediaPlayer
javafx.scene.media.MediaStatus
javafx.scene.media.MediaView
اولا : التعامل مع الفئة AudioClip
يتم استخدام الفئة audioClip لتشغيل مقطع صوت قصير مع الحد الأدنى من زمن الوصول. عادةً ما يكون ذلك مفيدًا للتأثيرات الصوتية ، وهي عادةً مقاطع صوتية قصيرة...ويتم تشغيل تلك المفات باستخدام الشفرة التالية :
1_إستيراد الفئة [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] التى تستخدم لتشغيل مقاطع الصوت القصيرة
- الكود:
javafx.scene.media.AudioClip
2_انشاء وتحديد مسار الملف الصوتي
- الكود:
final URL resource = getClass().getResource("resources/beep.wav");
3_بإنشاء فئة جديدة من الفئة [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] ليمثل كائن تشغيل الملف الصوتي ثم تمرير مسار الملف الية :
- الكود:
final AudioClip clip = new AudioClip(resource.toString());
كما رايتك فى الشفرة اعلاه توفر فئة AudioClip مُنشئًا واحدًا فقط يأخذ عنوان URL في نموذج السلسلة ، وهو عنوان URL لمصدر الصوت. يتم تحميل مقطع الصوت على الفور في الذاكرة في شكل خام غير مضغوط. هذا هو السبب وراء عدم استخدام هذه الفئة لمقاطع الصوت الطويلة.
يمكن أن يستخدم عنوان URL المصدر بروتوكولات HTTP و file و JAR. هذا يعني أنه يمكنك تشغيل مقطع صوتي من الإنترنت أونظام الملفات المحلي أوملف JAR.
و المثال الكامل على النحو التالى :
- الكود:
import java.net.URL;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.scene.media.AudioClip;
import javafx.stage.Stage;
/**
* @author Dean Iverson
*/
public class Main extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
final URL resource = getClass().getResource("resources/beep.wav");
final AudioClip clip = new AudioClip(resource.toString());
final Button button = new Button("Bing Zzzzt!");
button.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
clip.play(1.0);
}
});
final StackPane stackPane = new StackPane();
stackPane.setPadding(new Insets(10));
stackPane.getChildren().add(button);
final Scene scene = new Scene(stackPane, 200, 200);
final URL stylesheet = getClass().getResource("media.css");
scene.getStylesheets().add(stylesheet.toString());
primaryStage.setTitle("Basic AudioClip Example");
primaryStage.setScene(scene);
primaryStage.show();
}
}
مثال اخر تشغيل مقطع صوتي من خلال الشبكة على النحو التالى :
- الكود:
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.media.AudioClip;
import javafx.stage.Stage;
public class Main extends Application {
public static void main(String[] args) {
Application.launch(args);
}
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("Text Fonts");
Group g = new Group();
Scene scene = new Scene(g, 550, 250);
AudioClip plonkSound = new AudioClip("http://somehost/p.aiff");
plonkSound.play();
primaryStage.setScene(scene);
primaryStage.show();
}
}
التعامل مع الطريقة play()
الطريقة play هى المسؤلة عن تشغيل الملف الصوتي ولها ثلاث مشيدات على النحو التالى :
- الكود:
void play()
- الكود:
void play(double volume)
- الكود:
void play(double volume, double balance, double rate, double pan,int priority)
المعلمات:
- volume - مستوى الصوت للمقطع التى يعمل حاليا. نطاق الحجم الصالح هو 0.0 إلى 1.0 ، بمعني انه ليتم كتم الصوت نستخدم القيمة 0.0 أو نستخدم القيمة 1.0 الحجم الكامل...وهكذا يتم التحكم بحجم الصوت
- balance - توازن يسار / يمين أو أحجام قنوات نسبية لتأثيرات الستيريو...النطاق الصالح هو -1.0 إلى 1.0. تعيّن القيمة -1.0 التشغيل في القناة اليمنى عند مستوى الصوت العادي وتقوم بكتم القناة اليمنى. تعيّن القيمة 1.0 التشغيل في القناة اليمنى عند مستوى الصوت العادي ويتم تجاهل القناة اليسرى. القيمة الافتراضية هي 0.0 ، والتي تحدد التشغيل في كلتا القناتين في وحدة التخزين العادية.
- rate - تحدد السرعة السرعة النسبية التي يتم تشغيل الصوت بها. النطاق الصالح هو 0.125 إلى 8.0. تعني القيمة 0.125 أن المقطع يتم تشغيله أبطأ ثماني مرات ، وقيمة 8.0 تعني أن المطقع يتم تشغيلة أسرع ثماني مرات. المعدل الافتراضي هو 1.0 ، والذي يلعب المقطع بالمعدل الطبيعي
- pan - تحدد توزيع المقطع بين القناتين اليمنى واليسرى. النطاق الصالح هو -1.0 إلى 1.0. تقوم قيمة -1.0 بنقل المقطع كليًا إلى القناة اليسرى. تقوم قيمة 1.0 بنقل المقطع كليًا إلى القناة اليمنى. القيمة الافتراضية هي 0.0 ، والتي تقوم بتشغيل المقطع بشكل طبيعي. إن ضبط قيمة pan لمقطع أحادي له نفس تأثير إعداد القيمة balance لمقاطع الصوت باستخدام صوت ستيريو.
- priority - أولوية تأثير الصوت. سيتم إسقاط التأثيرات ذات الأولوية الأقل أولاً في حالة محاولة العديد من التأثيرات في وقت واحد.
خصائص التشغيل :
تدعم فئة AudioClip ضبط بعض خصائص الصوت عند تشغيل المقطع الصوتي وهي على النحو التالى :
الخاصية cycleCount : تلك الخاصية تحدد عدد مرات تشغيل الملف عندما يتم استدعاء طريقة play() ..القيمة الافتراضية هي 1 معني ذلك ان يتم تشغيل الملف لمرة واحدة فقط ...ويتم استخدام تلك الخاصية على النحو التالى :
- الكود:
AudioClip egyplay = new AudioClip("http://somehost/p.aiff");
egyplay.play();
egyplay.setCycleCount(int count)
حيث count عدد مرات التشغيل التى تريد تنفيذها
زهراء- ........
- تاريخ التسجيل : 18/02/2011
المساهمات : 438
النقاط : 769
التقيم : 67
الدولة :
الجنس :
رد: تعلم JavaFx ..مقال36_ التعامل مع الميديا Media with JavaFX
ثانيا : التعامل مع الفئات Media و MediaPlayer و MediaView
كما رأينا فى الجزء الاول من المقال أن الفئة audioClip تستخدم لتشغيل مقطع صوت قصير عادةً ما يكون ذلك مفيدًا للتأثيرات الصوتية ...لذلك وفرت الـــ [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] الفئات التالية للتعامل مع ملفات الميديا كبيرة الحجم سواء كانت صوت أو فيديوا وهى :
ويعتبر تشغيل ملفات الميديا بهذه الفئات في JavaFX أمرًا بسيطًا للغاية ،فمثلا نحن بحاجة إلى إنشاء فئة javafx.scene.media.Media بتمرير مسار الملف الصوتي في منشئه لتشغيل الملفات الصوتية... كما فى الخطوات البسيطة التالية :
1_إنشاء كائن جديد من الفئة Media ثم تمرير موقع أو عنوان الملف الصوتي في منشئه على النحو التالى :
2_إنشاء كائن جديد من الفئة Mediaplayer ثم تمرير كائن Media في منشئه على النحو التالى :
3_استدعاء الأسلوب play () للكائن MediaPlayer لتشغيل الملف الصوتي :
وهكذا ابسط مثال لتشغيل ملف صوتي فى الـــ [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]....تعالوا الان نتطرق لتلك الكائنات بشيء من التفصيل :
كما فى المثال اعلاه فان الفئة Media تمثل مصدر الوسائط ، الذى قد يكون صوتًا أو فيديو. وتوفر ايضا المعلومات المتعلقة بالوسائط ، على سبيل المثال ، المدة والبيانات الوصفية وما إلى ذلك.
إذا كانت الوسائط عبارة عن فيديو ، فإنها توفر عرض الفيديو وارتفاعه... يتم إنشاؤه من خلال توفير سلسلة تحتوي على مسار مصدر الوسائط ، كما راينا فى المثال اعلاه أو كما في التعليمة البرمجية التالية:
تحتوي فئة الوسائط على الخصائص التالية ، وهي للقراءة فقط:
يوفر MediaPlayer عناصر التحكم ، على سبيل المثال ، تشغيل ، إيقاف مؤقت ، إيقاف ، طلب ، سرعة التشغيل ، ضبط مستوى الصوت ، و لتشغيل الوسائط. يوفر MediaPlayer مُنشئًا واحدًا فقط يأخذ كائن Media كوسيطة كما راينا فى المثال السابق أو على النحو التالى :
الكائن MediaView يعتبر شاشة أو صندوق محتوي لعرض الوسائط التى يتم تشغيلها بواسطة الكائن MediaPlayer. لاحظ أن مقطع صوتي لا يحتوي على عناصر مرئية. لذلك إذا حاولت إنشاء MediaView لمحتوى صوتي ، فسيكون فارغًا. أما وسائط الفيديو ، يمكنك إنشاء MediaView وإضافته إلى النافذة.
توفر فئة MediaView منشأتين:
المنشىء الاول أن يتم انشاء كائن جديد من الفئة MediaView ثم تمرير الكائن MediaPlayer باستخدام طريقة تعين الخصائص على النحو التالى :
المنشىء الثاني أن يتم انشاء كائن جديد من الفئة MediaView ثم تمرير الكائن MediaPlayer مباشرة كوسيطة على النحو التالى :
كما تلاحظ فى المثال اعلاه تحدد خصائص fitWidth و fitHeight العرض والارتفاع المحددين للفيديو ، على التوالي. بشكل افتراضي ، فهي صفر ، مما يعني أنه سيتم استخدام العرض والارتفاع الأصلي للوسائط.
وهناك خواص اخرى مثل :
الخاصية preserveRatio التى ما إذا كان سيتم الحفاظ على نسبة العرض إلى الارتفاع للوسائط أثناء تغيير الحجم أم لا ...بشكل افتراضي تاخذ القيمة false.
الخاصية smooth التى تحدد جودة خوارزمية التصفية لاستخدامها في تغيير حجم الفيديو. القيمة الافتراضية هي النظام الأساسي المعتمد. إذا تم تعيينه على "true" ، يتم استخدام خوارزمية تصفية أفضل جودة.
الخاصية viewport التى تحدد إطار العرض وهو عبارة عن منطقة مستطيلة لعرض جزء من الرسم. تسمح لك خصائص إطار العرض x و y معا بتحديد المنطقة المستطيلة في الفيديو التي سيتم عرضها في MediaView.
كائن الـــ [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] لديه عدة حالات يتم تحديدها بواسطة الخاصية status وهي خاصية للقراءة فقط. تتغير الحالة عند تنفيذ إجراء على MediaPlayer. و تاخذ أحد الثوابت الثمانية الموجودة في MediaPlayer.Status وهي على النحو التالى:
UNKNOWN
READY
PLAYING
PAUSED
STALLED
STOPPED
HALTED
DISPOSE
عندما يتم إنشاء MediaPlayer ، تكون حالته UNKNOWN وعندما يتم تحديد المصدر ينتقل حالتة MediaPlayer من READY إلى READY...و ينتقل MediaPlayer إلى حالة PLAYING عندما يتم استدعاء طريقة play و عندما يتم تشغيل MediaPlayer ، قد يدخل إلى الحالة STALLED إذا لم يكن لديه بيانات كافية في المخزن المؤقت الخاص به للتشغيل. حيث تشير هذه الحالة إلى أن MediaPlayer يقوم بتخزين البيانات مؤقتًا. عند تخزين البيانات الكافية ، يتم الرجوع إلى حالة PLAYING....الى غير ذلك من الحالات
ويمكنك تحديد تلك الحالات بطريقتان :
عن طريق إضافة ChangeListener إلى خاصية Status
عن طريق تحديد معالجات تغيير الحالة
الطريقة الأولى يمكنك استخدامها باستخدام الشفرة التالية :
الطريقة الثانية مناسبة إذا كنت مهتمًا بالتعامل مع نوع محدد من تغيير الحالة. حيث تحتوي فئة MediaPlayer على الخصائص التالية التي يمكن ضبطها على كائنات Runnable:
onReady
onPlaying
onRepeat
onStalled
onPaused
onStopped
onHalted
على سبيل المثال ، يتم استدعاء الأسلوب run () الخاص بـ onPlaying handler عندما يكون MediaPlayer في حالة PLAYING.
توضح الشفرة التالية كيفية تعيين معالجات لنوع محدد من تغيير الحالة:
كما رأينا فى الجزء الاول من المقال أن الفئة audioClip تستخدم لتشغيل مقطع صوت قصير عادةً ما يكون ذلك مفيدًا للتأثيرات الصوتية ...لذلك وفرت الـــ [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] الفئات التالية للتعامل مع ملفات الميديا كبيرة الحجم سواء كانت صوت أو فيديوا وهى :
Media
MediaPlayer
MediaView
ويعتبر تشغيل ملفات الميديا بهذه الفئات في JavaFX أمرًا بسيطًا للغاية ،فمثلا نحن بحاجة إلى إنشاء فئة javafx.scene.media.Media بتمرير مسار الملف الصوتي في منشئه لتشغيل الملفات الصوتية... كما فى الخطوات البسيطة التالية :
1_إنشاء كائن جديد من الفئة Media ثم تمرير موقع أو عنوان الملف الصوتي في منشئه على النحو التالى :
- الكود:
Media media = new Media("http://path/file_name.mp3");
2_إنشاء كائن جديد من الفئة Mediaplayer ثم تمرير كائن Media في منشئه على النحو التالى :
- الكود:
Mediaplayer Player = new MediaPlayer(media);
3_استدعاء الأسلوب play () للكائن MediaPlayer لتشغيل الملف الصوتي :
- الكود:
Player.setAutoPlay(true);
وهكذا ابسط مثال لتشغيل ملف صوتي فى الـــ [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]....تعالوا الان نتطرق لتلك الكائنات بشيء من التفصيل :
1_كائن Media
كما فى المثال اعلاه فان الفئة Media تمثل مصدر الوسائط ، الذى قد يكون صوتًا أو فيديو. وتوفر ايضا المعلومات المتعلقة بالوسائط ، على سبيل المثال ، المدة والبيانات الوصفية وما إلى ذلك.
إذا كانت الوسائط عبارة عن فيديو ، فإنها توفر عرض الفيديو وارتفاعه... يتم إنشاؤه من خلال توفير سلسلة تحتوي على مسار مصدر الوسائط ، كما راينا فى المثال اعلاه أو كما في التعليمة البرمجية التالية:
- الكود:
URL mediaUrl = getClass().getResource("Test.mp4");
String mediaStringUrl = mediaUrl.toExternalForm();
// Create a Media
Media media = new Media(mediaStringUrl);
تحتوي فئة الوسائط على الخصائص التالية ، وهي للقراءة فقط:
- duration :تحدد مدة الوسائط بالثواني. إنه كائن المدة. إذا كانت المدة غير معروفة ، فسيكون Duration.UNKNOWN.
- width & height :يعطي العرض والطول للمصدر بالبكسل ، على التوالي. إذا لم يكن للوسائط العرض والارتفاع ، يتم تعيينها على أنها صفر.
2_كائن MediaPlayer
يوفر MediaPlayer عناصر التحكم ، على سبيل المثال ، تشغيل ، إيقاف مؤقت ، إيقاف ، طلب ، سرعة التشغيل ، ضبط مستوى الصوت ، و لتشغيل الوسائط. يوفر MediaPlayer مُنشئًا واحدًا فقط يأخذ كائن Media كوسيطة كما راينا فى المثال السابق أو على النحو التالى :
- الكود:
final MediaPlayer player = new MediaPlayer(media);
3_ الكائن MediaView
الكائن MediaView يعتبر شاشة أو صندوق محتوي لعرض الوسائط التى يتم تشغيلها بواسطة الكائن MediaPlayer. لاحظ أن مقطع صوتي لا يحتوي على عناصر مرئية. لذلك إذا حاولت إنشاء MediaView لمحتوى صوتي ، فسيكون فارغًا. أما وسائط الفيديو ، يمكنك إنشاء MediaView وإضافته إلى النافذة.
توفر فئة MediaView منشأتين:
المنشىء الاول أن يتم انشاء كائن جديد من الفئة MediaView ثم تمرير الكائن MediaPlayer باستخدام طريقة تعين الخصائص على النحو التالى :
- الكود:
// Create a 400X300 MediaView
MediaView mediaView = new MediaView();
mediaView.setMediaPlayer(player);
mediaView.setFitWidth(400);
mediaView.setFitHeight(300);
المنشىء الثاني أن يتم انشاء كائن جديد من الفئة MediaView ثم تمرير الكائن MediaPlayer مباشرة كوسيطة على النحو التالى :
- الكود:
// Create a 400X300 MediaView
MediaView mediaView = new MediaView(player);
mediaView.setFitWidth(400);
mediaView.setFitHeight(300);
كما تلاحظ فى المثال اعلاه تحدد خصائص fitWidth و fitHeight العرض والارتفاع المحددين للفيديو ، على التوالي. بشكل افتراضي ، فهي صفر ، مما يعني أنه سيتم استخدام العرض والارتفاع الأصلي للوسائط.
وهناك خواص اخرى مثل :
الخاصية preserveRatio التى ما إذا كان سيتم الحفاظ على نسبة العرض إلى الارتفاع للوسائط أثناء تغيير الحجم أم لا ...بشكل افتراضي تاخذ القيمة false.
الخاصية smooth التى تحدد جودة خوارزمية التصفية لاستخدامها في تغيير حجم الفيديو. القيمة الافتراضية هي النظام الأساسي المعتمد. إذا تم تعيينه على "true" ، يتم استخدام خوارزمية تصفية أفضل جودة.
الخاصية viewport التى تحدد إطار العرض وهو عبارة عن منطقة مستطيلة لعرض جزء من الرسم. تسمح لك خصائص إطار العرض x و y معا بتحديد المنطقة المستطيلة في الفيديو التي سيتم عرضها في MediaView.
تحديد الحالة لعمليات MediaPlayer
كائن الـــ [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] لديه عدة حالات يتم تحديدها بواسطة الخاصية status وهي خاصية للقراءة فقط. تتغير الحالة عند تنفيذ إجراء على MediaPlayer. و تاخذ أحد الثوابت الثمانية الموجودة في MediaPlayer.Status وهي على النحو التالى:
UNKNOWN
READY
PLAYING
PAUSED
STALLED
STOPPED
HALTED
DISPOSE
عندما يتم إنشاء MediaPlayer ، تكون حالته UNKNOWN وعندما يتم تحديد المصدر ينتقل حالتة MediaPlayer من READY إلى READY...و ينتقل MediaPlayer إلى حالة PLAYING عندما يتم استدعاء طريقة play و عندما يتم تشغيل MediaPlayer ، قد يدخل إلى الحالة STALLED إذا لم يكن لديه بيانات كافية في المخزن المؤقت الخاص به للتشغيل. حيث تشير هذه الحالة إلى أن MediaPlayer يقوم بتخزين البيانات مؤقتًا. عند تخزين البيانات الكافية ، يتم الرجوع إلى حالة PLAYING....الى غير ذلك من الحالات
ويمكنك تحديد تلك الحالات بطريقتان :
عن طريق إضافة ChangeListener إلى خاصية Status
عن طريق تحديد معالجات تغيير الحالة
الطريقة الأولى يمكنك استخدامها باستخدام الشفرة التالية :
- الكود:
// Add a ChangeListener to the player
player.statusProperty().addListener(new ChangeListener<MediaPlayer.Status>()
{
// Log the Message
public void changed(ObservableValue<? extends MediaPlayer.Status> ov,
final MediaPlayer.Status oldStatus, final MediaPlayer.Status newStatus)
{
messageArea.appendText("\nStatus changed from " + oldStatus + " to " + newStatus);
}
});
الطريقة الثانية مناسبة إذا كنت مهتمًا بالتعامل مع نوع محدد من تغيير الحالة. حيث تحتوي فئة MediaPlayer على الخصائص التالية التي يمكن ضبطها على كائنات Runnable:
onReady
onPlaying
onRepeat
onStalled
onPaused
onStopped
onHalted
على سبيل المثال ، يتم استدعاء الأسلوب run () الخاص بـ onPlaying handler عندما يكون MediaPlayer في حالة PLAYING.
توضح الشفرة التالية كيفية تعيين معالجات لنوع محدد من تغيير الحالة:
- الكود:
// Add a Handler for PLAYING status
player.setOnPlaying(new Runnable()
{
public void run()
{
messageArea.appendText("\nPlaying now");
}
});
// Add a Handler for STOPPED status
player.setOnStopped(new Runnable()
{
public void run()
{
messageArea.appendText("\nStopped now");
}
});
عدل سابقا من قبل زهراء في الأربعاء نوفمبر 21, 2018 10:27 am عدل 1 مرات
زهراء- ........
- تاريخ التسجيل : 18/02/2011
المساهمات : 438
النقاط : 769
التقيم : 67
الدولة :
الجنس :
رد: تعلم JavaFx ..مقال36_ التعامل مع الميديا Media with JavaFX
اشكرك على مجهودك الاستاذة [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] ....جارى تجهيز الشيك ...شيد حيلك
ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
سبحان الله وبحمدة .....سبحان الله العظيم
رد: تعلم JavaFx ..مقال36_ التعامل مع الميديا Media with JavaFX
أحمد مناع كتب:
اشكرك على مجهودك الاستاذة [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] ....جارى تجهيز الشيك ...شيد حيلك
زهراء- ........
- تاريخ التسجيل : 18/02/2011
المساهمات : 438
النقاط : 769
التقيم : 67
الدولة :
الجنس :
رد: تعلم JavaFx ..مقال36_ التعامل مع الميديا Media with JavaFX
جزاكم الله خيرا [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]
ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
NEXT- الادارة
- تاريخ التسجيل : 18/02/2011
المساهمات : 446
النقاط : 200660
التقيم : 28
الدولة :
الجنس :
رد: تعلم JavaFx ..مقال36_ التعامل مع الميديا Media with JavaFX
جزاكم الله خيرا [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]
الله يكرمك أخي [ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط]
زهراء- ........
- تاريخ التسجيل : 18/02/2011
المساهمات : 438
النقاط : 769
التقيم : 67
الدولة :
الجنس :
| |
صفحة 1 من اصل 1
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى
الجمعة أكتوبر 04, 2024 9:17 pm من طرف moslema_r
» شركة تنظيف مطابخ بالرياض بخصم 30% | كلين فايندر الرياض
الجمعة أكتوبر 04, 2024 9:09 pm من طرف moslema_r
» شركة تنظيف منازل بالرياض الحلول المثالية لتجنب عناء التنظيف
الجمعة أكتوبر 04, 2024 9:04 pm من طرف moslema_r
» افضل شركة تنظيف شقق بالرياض معتمدة | كلين فايندر
الجمعة أكتوبر 04, 2024 8:58 pm من طرف moslema_r
» استمتع بتجربة مميزة مع - شركة تنظيف اثاث بالرياض 20% خصم
الجمعة أكتوبر 04, 2024 8:52 pm من طرف moslema_r
» افضل شركة تنظيف احواش بالرياض | كلين فايندر
الجمعة أكتوبر 04, 2024 8:46 pm من طرف moslema_r
» افضل موقع بيع وشراء اثاث مستعمل واجهزة كهربائية بالكويت بأعلى سعر
الجمعة أكتوبر 04, 2024 8:40 pm من طرف moslema_r
» موقع مظلات وسواتر بالرياض معتمد - ضمان على االجودة | مؤسسة الظلال الشاملة
الجمعة أكتوبر 04, 2024 8:33 pm من طرف moslema_r
» خدمات فني حداد الرياض - بادر بطلب خدماتك بخصم حتى 15%
الجمعة أكتوبر 04, 2024 8:29 pm من طرف moslema_r
» مميزات عبايات سوداء فخمة:
الجمعة أكتوبر 04, 2024 8:24 pm من طرف moslema_r