كود
String msg[] = {"Welcome", "Home"};
JOptionPane.showMessageDialog(null, msg);
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);
}
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();
}
}
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);
}
}
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);
}
}
ليست هناك تعليقات:
إرسال تعليق