الثلاثاء، 30 يونيو 2009

JOptionPane how to use

تمرير String على شكل Object

كود
String msg[] = {"Welcome", "Home"};
JOptionPane.showMessageDialog(null, msg);


في هذا المثال قمنا بانشاء اوبجيكت من String ومررناها الي JOptionPane

فكان شكلها كالتالي






تحديد عرض مربع الحوار

لو اردنا عرض مربع حوار لعرض رسالة

وهذه الرسالة التي نريد عرضها للمستخدم طويلة

بالطبع سيظهر مربع الحوار وبداخله الرسالة و عرضه يعتمد على طول الرسالة

فنجد في بعض الاحيان ان الرسالة تظهر خارج حدود الشاشة فما الحل ؟

نحدد عرض مربع الحوار بحيث تصبح الرسالة في اكثر من سطر

لكن لدينا مشكلة اخرى

مكونات JOptionPane فقط للقراءة read-only

لذلك سنقوم بعملية override و التعديل على خصائص JOptionPane

وذلك لان عرض مربع الحوار يأخذ القيمة الافتراضية لطول ال String

وعند تحديد قيمة لعرض مربع الحوار يقوم بعملية word-wrap

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

لنرى مثال

كود
public static JOptionPane getNarrowOptionPane(int maxCharactersPerLineCount) {

class NarrowOptionPane extends JOptionPane {
int maxCharactersPerLineCount;
NarrowOptionPane(int maxCharactersPerLineCount) {
this.maxCharactersPerLineCount =
maxCharactersPerLineCount;
}
public int getMaxCharactersPerLineCount() {
return maxCharactersPerLineCount;
}
}

return new NarrowOptionPane(maxCharactersPerLineCount);
}


شرح الكود

قمنا بعمل ميثود ترجع قيمة من نوع JOptionPane وتستقبل متغير من نوع int

وهو قيمة عرض مربع الحوار التي سنمررها

بعد ذلك قمنا بتعريق كلاس داخلية inner class تحمل اسم NarrowOptionPane وترث من JOptionPane

و قمنا بتعريف متغير maxCharactersPerLineCount وهو موجود اصلا في JOptionPane

وعرفنا دالة بناء constructor وعدلنا على قيمة maxCharactersPerLineCount

وانشأنا ميثود ترجع قيمة maxCharactersPerLineCount


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

كود
import javax.swing.*;

public class TestJOptionPane extends JFrame{

public static JOptionPane getNarrowOptionPane(int maxCharactersPerLineCount) {
// Our inner class definition
class NarrowOptionPane extends JOptionPane {
int maxCharactersPerLineCount;
NarrowOptionPane(int maxCharactersPerLineCount) {
this.maxCharactersPerLineCount =
maxCharactersPerLineCount;
}
public int getMaxCharactersPerLineCount() {
return maxCharactersPerLineCount;
}
}

return new NarrowOptionPane(maxCharactersPerLineCount);
}

public static void main(String arg[]){

String msg = "This is a really long message. ...This is a really long message. ...This is a really long message. ...This is a really long message. ...This is a really long message. ...This is a really long message. ...";
JOptionPane pane = getNarrowOptionPane(50);
pane.setMessage(msg);
pane.setMessageType(JOptionPane.INFORMATION_MESSAGE);
JDialog dialog = pane.createDialog(null, "Width 50");
dialog.show();

}

}


في داخل الميثود main

عرفنا String ومررنا لها قيمة طووووويلة

انشأنا اوبجيكت من JOptionPane اسميناها pane

و اعطيناها قيمة من الميثود getNarrowOptionPane مع تمرير قيمة 50 وهي التي ستكون عرض مربع الحوار

القيمة 50 هي عدد الاحرف التي ستظهر في السطر الواحد

بعد ذلك استخدمنا JDialog لعرض JOptionPane وذلك عن طريق انشاء اوبجيكت جديد وتمرير pane لها

وبعد ذلك عرض ال dialog


سيكون الشكل كالتالي




خروج صوت عند ظهور مربع الحوار

يوجد اربعة انواع من الاصوات

OptionPane.errorSound

OptionPane.informationSound

OptionPane.questionSound

OptionPane.warningSound

وهم على حسب نوع مربع الحوار

اما استخدامهم فهو كالتالي

كود
UIManager.put("OptionPane.errorSound","sounds/OptionPaneError.wav");


UIManager.put تستقبل قيمتين الاولى نوع الصوت والثانية مسار ملف الصوت

وعند وضع هذا الكود في البرنامج فيقوم تلقائيا باصدار الصوت حسب نوع الرسالة

بدلا من هذا الكود يمكننا استخدام كود آخر ليريحنا

كود
UIManager.put("AuditoryCues.playList",UIManager.get("AuditoryCues.defaultCueList"));


في هذا الكود يقوم باحضاء كافة الاصوات الاربعة ويصدر كل صوت حسب نوع الرسالة


مثال

كود
import javax.swing.*;

public class TestJOptionPane extends JFrame{


public static void main(String arg[]){
UIManager.put("AuditoryCues.playList",UIManager.get("AuditoryCues.defaultCueList"));

JOptionPane.showMessageDialog(null,"QUESTION ?????","QUESTION_MESSAGE",JOptionPane.QUESTION_MESSAGE);
JOptionPane.showMessageDialog(null,"ERROR !!!!!!!","QUESTION_MESSAGE",JOptionPane.ERROR_MESSAGE);

}

}



ليست هناك تعليقات:

إرسال تعليق