استفاده از کلاس JOptionPane در جاوا

چاپ

استفاده از کلاس JOptionPane برای دریافت ورودی گرافیکی در جاوا

در فصل 1، یاد گرفتید که چگونه خروجی را در خط فرمان نشان دهید؛ همچنین آموختید که چگونه جعبه های پیغام گرافیکی را ایجاد کنید و در داخل آن، رشته ها(String) را به نمایش بگذارید. قبلا در این فصل، یاد گرفتید که چگونه داده های کیبورد را از طریق خط فرمان، دریافت کنید. شما همچنین می توانید با استفاده از کلاس JOptionPane از طریق یک جعبه ی مکالمه ی گرافیکی، داده ها را از کاربر دریافت کنید. 

در جاوا دو جعبه ی مکالمه وجود دارند که به وسیله ی آنها می توانید ورودی ها را از کاربر دریافت کنید:

1. InputDialog: این جعبه ی مکالمه، از کاربر می خواهد تا متن ورودی خود را وارد کند.

2. ConfirmDialog: این جعبه ی مکالمه، از کاربر یک سوال می پرسد؛ و دکمه های Yes و No و Cancel را به او ارائه می دهد. 

 


استفاده از جعبه ی مکالمه ی InputDialog در جاوا

جعبه ی مکالمه ی InputDialog، از کاربر یک سوال می پرسد و سپس یک فیلد متنی را به او ارائه می دهد تا بتواند پاسخ خود را در آن تایپ کند. برای ایجاد یک جعبه ی مکالمه ی InputDialog، می توانید از متد ()showInputDialog استفاده کنید. شش متد دیگر نیز وجود دارند که می توانند جایگزین این متد شوند، اما ساده ترین آنها، تنها از یک آرگومان استفاده می کند. متد ()showInputDialog یک رشته را بعنوان خروجی برمی گرداند که درواقع همان پاسخ کاربر است. این بدان معنی است که شما می توانید متد ()showInputDialog را به یک متغیر از نوع String انتساب دهید؛ سپس متغیر مورد نظر قادر خواهد بود تا مقدار وارد شده را در خود نگهداری کند. 

 نکته: قبلاً در این فصل یاد گرفتید که متد ()println یک متد جایگزین(overload) است. دوباره یادآوری می کنیم که، یک متد overload شده، درواقع چند نسخه ی مختلف با یک نام یکسان دارد؛ که شما می توانید هریک از آنها را مورد استفاده قرار دهید. و تنها آیتم های آنها با یکدیگر متفاوت هستند. 

 بعنوان مثال، عکس 2.16 یک اپلیکیشن را نشان می دهد؛ این اپلیکیشن یک جعبه ی مکالمه را ایجاد می کند که نام کاربر را درخواست می کند. هنگامی که کاربر این اپلیکیشن را اجرا می کند و کلمه ی Audrey را تایپ می کند و بر روی دکمه ی OK کلیک می کند یا کلید Enter را فشار می دهد، رشته ی Audrey در داخل متغیر result قرار می گیرد. اگر به عکس 2.16 توجه کنید، کلمه ی Hello با مقدار قرار گرفته در متغیر result ادغام می شود و سپس در داخل یک جعبه ی مکالمه نشان داده می شود. عکس 2.17 یک جعبه ی مکالمه را نشان می دهد که کاربر در آن یک نام را وارد کرده است؛ و عکس 2.18 جعبه ی مکالمه ی حاوی نتیجه را نشان می دهد. 

 

 

 

 


در داخل کلاس JOptionPane یک overload از متد ()showInputDialog وجود دارد که به برنامه نویس امکان می دهد تا ظاهر جعبه ی مکالمه را کنترل کند. از آن نسخه ی متد showInputDialog که چهار آرگومان را می پذیرد، می توان برای نمایش دادن یک عنوان( title) در نوار عنوان(title bar) جعبه ی مکالمه استفاده نمود؛ همچنین با استفاده از آن می توان یک علامت را برای مشخص کردن نوع جعبه ی مکالمه، نشان داد. این چهار آرگومان عبارتند از:

  1. آرگومان اول، مشخص کننده ی مولفه ی والد(parent) است؛ در صورتی که این آرگومان را برابر با مقدار null قرار دهیم، جعبه ی مکالمه در وسط صفحه  نمایش نشان داده خواهد شد. 
  2. آرگومان دوم، پیغامی را مشخص می کند که قرار است کاربر قبل از وارد کردن مقادیر، آن را مشاهده کند. معمولا این پیغام از نوع String است؛ اما می تواند هر نوع شیء ای باشد. 
  3. آرگومان سوم، عنوانی که قرار است در نوار عنوان(title bar) از جعبه ی مکالمه نشان داده شود را مشخص می کند. 
  4. آرگومان چهارم، نوع جعبه ی مکالمه را مشخص می کند. این آرگومان می تواند یکی از مقادیر زیر باشد: 

 

  1. ERROR_MESSAGE
  2. INFORMATION_MESSAGE
  3. PLAIN_MESSAGE
  4. QUESTION_MESSAGE
  5. WARNING_MESSAGE

بعنوان مثال هنگامی که دستور زیر اجرا می شود، جعبه ی مکالمه ی نشان داده شده در عکس 2.19 ظاهر خواهد شد:

مثال

JOptionPane.showInputDialog(null,
 "What is your area code?",
 "Area code information",
 JOptionPane.QUESTION_MESSAGE); 

 همان طور که در تصویر زیر مشاهده می کنید، در نوار عنوان(title bar)، عبارت Area code information نشان داده شده است؛ همچنین تصویر یک علامت سوال در کنار سوال مورد نظر نشان داده شده است. 

 


 متد ()showInputDialog یک رشته(String) را برمی گرداند. بنابراین اگر بخواهید از کاربر یک مقدار عددی را دریافت کنید، و آن را در یک عبارت محاسباتی مورد استفاده قرار دهید، باید این رشته ی برگردانده شده را به عدد تبدیل کنید. قبلا در این فصل آموختید که چگونه یک مقدار را از یک نوع به نوع دیگری تبدیل کنید. اما تبدیل نوع، تنها برای داده های پایه یعنی double و int و char و ... قابل انجام است؛ نه برای داده ها از نوع String. بنابراین برای تبدیل یک داده از نوع String به integer(عدد صحیح) و یا به double، باید از متدهای داخلی جاوا که در داخل کلاس های Integer و Double قرار دارند، استفاده کنیم. هر نوع داده ی پایه در جاوا، دارای یک کلاس در داخل پکیج java.lang می باشد. نام این کلاس ها، با حروف بزرگ آغاز می شود. به این کلاس ها، کلاس های type-wrapper گفته می شود و شامل متدهایی هستند که به وسیله ی آنها می توان مقادیر داده های پایه را مورد پردازش قرار داد. 

 عکس 2.20 یک اپلیکیشن به نام SalaryDialog را نشان می دهد که حاوی دو (متغیر) رشته به نام های wageString و dependentsString است؛ همان طور که مشاهده می کنید، در داخل این کدها، دو متد ()showInputDialog مورد فراخوانی قرار گرفته اند و پاسخ کاربر در داخل متغیرهای رشته ای ذخیره می شوند. 

کدهای آبی رنگ که در داخل عکس 2.20 نشان داده شده اند، روش تبدیل رشته ها به مقادیر عددی را نشان می دهند. این تبدیل ها، با استفاده ازمتدهای کلاس های Integer و Double انجام می شوند. همان طور که در عکس 2.20 مشاهده می کنید، آن مقداری که از نوع double است با استفاده از متد ()Double.parseDouble مورد تبدیل قرار می گیرد؛ و عدد صحیح(integer) مورد نظر نیز با استفاده از متد ()Integer.parseInt تبدیل می شود. نحوه ی اجرای این اپلیکیشن، در عکس 2.21 نشان داده شده است. 

 

نتیجه:

 


استفاده از جعبه ی مکالمه ی ConfirmDialog در جاوا

 گاهی اوقات ممکن است نیاز نداشته باشید که کاربر اطلاعاتی را از طریق کیبورد وارد کند. بلکه ممکن است بخواهید کاربر از میان چند گزینه، بر روی یکی، کلیک کند. جعبه ی مکالمه ی confirm dialog، گزینه های Yes و No و Cancel را نمایش می دهد. شما می توانید با استفاده از متد ()showConfirmDialog که در کلاس JOptionPane قرار دارد، یک جعبه ی مکالمه از این نوع را ایجاد کنید. این متد، دارای 4 جایگزین(overload) می باشد. ساده ترین آنها به یک مولفه ی والد(parent component) که می تواند null باشد و یک رشته که در جعبه ی مکالمه نمایش می یابد، نیاز دارد. 

متد ()showConfirmDialog یک عدد صحیح را برمی گرداند؛ این عدد را باید در داخل کدها، با یکی از مقادیر زیر مورد مقایسه قرار دهیم:

  1. JOptionPane.YES_OPTION
  2. JOptionPane.NO_OPTION
  3. JOptionPane.CANCEL_OPTION

گزینه ی شماره 1، کلیک بر روی دکمه ی Yes را نشان می دهد. گزینه ی شماره 2، کلیک بر روی دکمه ی No را نشان می دهد و گزینه ی شماره 3، کلیک بر روی دکمه ی Cancel را نشان می دهد. 

 عکس 2.22 یک اپلیکیشن را نشان می دهد که از کاربر یک سوال می پرسد.  عبارت رنگی شده در این عکس، یک جعبه ی مکالمه را ایجاد می کند؛ و پاسخ کاربر را ذخیره می نماید؛  این جعبه در عکس 2.23 نشان داده شده است. همان طور که در کدها مشاهده می کنید، پاسخ کاربر، در یک متغیر از نوع integer(عدد صحیح) به نام selection ذخیره می شود. 

 

 

 پس از اینکه یک مقدار در داخل متغیر selection قرار می گیرد، ما آن را با مقدار JOptionPane.YES_OPTION مورد مقایسه قرار می دهیم، و حاصل را که از نوع بولین است در یک متغیر به نام isYes ذخیره می کنیم. در صورتی که کاربر در داخل جعبه ی مکالمه، دکمه ی Yes را انتخاب کرده باشد، این متغیر برابر با true می شود و در غیر این صورت، مقدار false در داخل آن قرار می گیرد. در نهایت، نتایج true و false، نشان داده می شوند. 

عکس 2.24 یک خروجی را نشان می دهد که در آن، کاربر بر روی دکمه ی Yes کلیک کرده است:

 

 شما همچنین می توانید یک جعبه ی confirm dialog بسازید که دارای 5 آرگومان، بصورت زیر باشد:

  1. مولفه ی والد، که می تواند null باشد.
  2. پیغام مورد نظر
  3. عنوان(title) نشان داده شده در نوار عنوان(title bar)
  4. یک عدد صحیح که نوع دکمه های نشان داده شده را مشخص می کند. و می تواند یکی از موارد زیر باشد:

 

  5.یک عدد صحیح که نوعِ جعبه ی مکالمه را مشخص می کند.و می تواند یکی از موارد زیر باشد:

هنگامی که دستور زیر اجرا می شود، یک جعبه ی مکالمه ی confirm dialog نمایش می یابد؛ درست مثل عکس 2.25:

مثال(آموزش جاوا)

JOptionPane.showConfirmDialog(null,
"A data input error has occurred. Continue?",
"Data input error", JOptionPane.YES_NO_OPTION,
JOptionPane.ERROR_MESSAGE);

 

 همان طور که در تصویر بالا مشاهده می کنید، در نوار عنوان(title bar)، عبارت Data input error نشان داده شده است. همچنین دکمه های Yes و No در این تصویر به چشم می خورند. و در این جعبه ی مکالمه، نماد خطا(علامت ضرب در) به همراه پیام A data input error has occurred. Continue نشان داده می شود. نماد خطا در این تصویر، با استفاده از دستور ERROR_MESSAGE ایجاد شده است.