پس از تکمیل UI در آموزش های قسمت های قبل، در این آموزش قصد داریم ببنیم که به چه شکل می توان داده های ورودی را از داخل TextField ها گرفته و با استفاده از دکمه Add اعمال ریاضیاتی را روی آن ها اعمال نمود.
همانطور که قبلاً گفته شد دکمه Clear این وظیفه را دارا است تا هر عددی که داخل TextField ها قرار دارد را پاک کند. حال برای ایجاد چنین Functionality یا "عملکردی" روی دکمه Clear راست کلیک کرده سپس روی گزینه Event کلیک می کنیم:
همانطور که در تصویر فوق می بینیم پس از کلیک کردن روی گزینه Event پنجره دیگری باز خواهد شد. از این پنجره روی گزینه Action کلیک کرده و در نهایت از پنجره ای که باز خواهد شد روی گزینه actionPerformed به معنی "کاری که صورت گرفته است" کلیک می کنیم:
به محض کلیک کردن روی گزینه actionPerformed می بینیم که به صورت خودکار به Tab مربوط به Source می رویم و جایی از کد برای ما نمایش داده می شود که بایستی کدهای تکمیلی خود را اضافه کنیم. همانطور که در تصویر فوق مشخص است، کدهای مربوط به پاک کردن اعداد داخل TextField ها را می بایست در بخشی از کد اضافه کنیم که با یک مستطیل نمایش داده شده است. حال این سوال ممکن است پیش بیاید که بر چه مبنایی این بخش از کد را انتخاب کردیم. در واقع همانطور که در تصویر فوق مشخص است این دکمه دارای یک id برابر با jButton2 است و این id مرتبط با دکمه Clear است. برای اینکه از این مسئله مطمئن شویم مجدد روی Tab مربوط به Design کلیک می کنیم و روی دکمه Clear کلیک راست می کنیم:
در ادامه روی گزینه Change Variable Name کلیک می کنیم:
می بینیم که نام jButton2 به صورت خودکار برای این دکمه در نظر گرفته شده است که اگر بخواهیم می توانیم آن را تغییر دهم بدهیم. مجدد به Tab مربوط به Source مراجعه می کنیم و شروع به تکمیل کد خود برای دکمه Clear می کنیم:
همانطور که در تصویر فوق می بینیم id مرتبط با TextField اول jTextField1 نام دارد. این id را نوشته و متدی تحت عنوان setText(); را به آن ضمیمه می کنیم به این صورت که پس از نام id یک نقطه قرار داده سپس این متد را می نویسیم و در انتها هم یک علامت ; قرار می دهیم. هر متنی که داخل پرانتزهای این متد قرار دهیم در TextField نمایش داده خواهد شد اما از آنجا که می خواهیم TextField خالی شود فقط دو علامت “ “ داخل آن قرار می دهیم.
همین کار را برای دو فیلد دیگر هم انجام می دهیم. حال ممکن است مجدد این سوال پیش بیاید که نام های jTextField1 و jTextField2 و jTextField3 از کجا ایجاد شده اند. به همان صورت پیش می توان روی تک تک TextField ها کلیک راست کرده و روی Change Variable Name کلیک کرد تا بتوان به نام TextField مربوطه دست یافت. حال نیاز است تا برنامه خود را تست کنیم:
برای این منظور همانطور که در تصویر فوق مشخص است روی دکمه Run که با یک مثلث سبز رنگ نشان داده می شود کلیک می کنیم:
همانطور که می بینیم در هر سه فیلد اعدادی تصادفی را وارد کرده ایم. حال به محض کلیک کردن روی دکمه Clear کلیه فیلدها پاک خواهند شد:
در ادامه قصد داریم تا برای دکمه Add هم عملکردی تعریف کنیم. در حقیقت هر آنچه که وارد فیلدهای مرتبط با First Number و Second Number می کنیم یک String خواهد بود. حال دکمه Add وظیفه دارد تا این String ها را به متغیری از جنس عددی تبدیل کند و سپس آن ها را با یکدیگر جمع کند. در نهایت حاصلجمع را مجدد به یک String تبدیل کرده و در فیلد مربوط به Result نمایش دهد.
برای این منظور همانطور که برای دکمه Clear یک actionPerformed در نظر گرفتیم برای دکمه Add نیز این کار را انجام می دهیم:
همانطور که در تصویر فوق ملاحظه می شود روی دکمه Add کلیک راست کرده و از منوی Events روی Action کلیک کرده و در نهایت روی گزینه ActionPerformed کلیک می کنیم:
می بینیم که به صورت خودکار کدهای مرتبط با این دکمه نمایش داده می شوند. در واقع از آنجا که id مرتبط با این دکمه برابر با jButton1 است پس می بایست به تکمیل کدهای مرتبط با این id بپردازیم:
اولین کاری که می کنیم این است که سه متغیر از جنس عدد اعشاری double تعریف می کنیم یکی تحت عنوان numberOne که مرتبط با فیلد First Number خواهد بود، یکی تحت عنوان numberTwo که مرتبط با فیلد Second Number خواهد بود و یکی هم تحت عنوان numberResult که مرتبط با فیلد Result خواهد بود.
حال نیاز است تا با استفاده از کلاس Double و متدهای مرتبط با آن String ها را به عدد اعشاری تبدیل کنیم. برای این منظور کد خود را به صورت زیر تکمیل می کنیم:
همانطور که می بینیم ابتدا نام متغیر numberOne را نوشته و یک علامت مساوی مقابل آن قرار می دهیم. حال از آنجا که می خواهیم محتویات jTextField1 را به یک عدد اعشاری تبدیل کنیم می بایست از کلاس Double جاوا استفاده کرده و متد parseDouble را به آن ضمیمه کنیم. کاری که این کلاس و متد انجام می دهند این است که String یی که به آن اختصاص داده شود را به یک عدد اعشاری تبدیل می کنند. در ادامه می بایست داخل پرانتز مرتبط با متد parseDouble نام فیلد مربوطه را نوشته سپس متد getText() را به آن ضمیمه کنیم. کاری که این متد انجام می دهد این است که متن داخل TextField را می گیرد.
همین مراحل را برای فیلد مرتبط با Second Number هم انجام می دهیم. از این پس مقادیر متغیرهای numberOne و numberTwo اعدادی اعشاری خواهد بود که توسط کاربر وارد فیلدهای نرم افزار می شوند.
در ادامه می بایست مقادیر متغیرهای numberOne و numberTwo را با یکدیگر جمع نموده و در متغیری تحت عنوان numberResult ذخیره سازیم. برای این منظور کد فوق را به صورت زیر تکمیل می کنیم:
حال می بایست مقدار به دست آمده را به فیلد مرتبط با Result اختصاص دهیم اما این در حالی است که ابتدا می بایست این متغیر اعشاری را به یک String تبدیل کنیم. برای این منظور کد فوق را به صورت زیر تکمیل می کنیم:
همانطور که می بینیم برای اختصاص دادن چیزی به یک فیلد می بایست از متدی تحت عنوان setText(); استفاده کرد. برای این منظور id مرتبط با فیلد Result را نوشته و متد setText(); را به آن ضمیمه می کنیم. اکنون چنانچه نام numberResult را داخل پرانتز بنویسیم تا مقدار اختصاص داده شده به آن به این فیلد اختصاص یابد برنامه با مشکل مواجه شد چرا که ما نمی توانیم یک متغیر از جنس double را به متد setText(); اختصاص دهیم. از اینرو ابتدا می بایست این متغیر double را به یک String تبدیل کنیم. برای این منظور از کلاس String و متد valueOf() استفاده می کنیم. به عبارت دیگر به برنامه خود دستور می دهیم تا مقدار متغیر numberResult را گرفته و آن را تبدیل به یک String کند و در نهایت آن String را به فیلدی تحت عنوان jTextField3 اختصاص دهد.
حال برنامه خود را اجرا می کنیم:
در فیلد اول عدد 7 را نوشته و در فیلد دوم هم عدد 7 را مجدد می نویسیم. حال با کلیک کردن روی دکمه Add این دو عدد را با یکدیگر جمع کرده و در فیلد مرتبط با نتیجه نمایش می دهیم. علاوه بر این با کلیک کردن روی دکمه Clear هم کلیه فلیدها را پاک خواهیم کرد.