menusearch
javapro.ir

جلسه نوزدهم - کلاس JSpinner در جاوا

جستجو
شنبه ۳ مهر ۱۴۰۰ | ۱۳:۹:۴۳
۱۳۹۶/۳/۲۴ چهارشنبه
(1)
(0)
جلسه نوزدهم - کلاس JSpinner در جاوا
جلسه نوزدهم - کلاس JSpinner در جاوا
کلاس JSpinner اجزای (component) گرافیکی است که به کاربر اجازه می‌دهد یک عدد یا یک مقدار را از یک دنباله مرتب از پیش تعیین شده انتخاب کند. برای درک بهتر از ظاهر JSpinner تصویر(1) را مشاهده کنید:

آموزش گرافیک در جاوا

•    سازنده‌‌‌‌های پرکاربرد کلاس JSpinner :
سازنده‌‌‌‌های jspinner در جاوا

•    متد‌‌‌‌های پرکاربرد کلاس JSpinner :
متد‌‌‌‌های JSpinner در جاوا


مثال:
package java like ;
import javax.swing.*;    
public class SpinnerExample {
   
public static void main(String[] args) {    
    JFrame f=new JFrame("Spinner Example");    
    SpinnerModel value =
           
new SpinnerNumberModel(5, //initial value
                0, //minimum value
                10,
//maximum value  
                1);
//step
    JSpinner spinner = new JSpinner(value);  
            spinner.setBounds(100,100,50,30);    
            f.add(spinner);    
            f.setSize(300,300);    
            f.setLayout(null);    
            f.setVisible(true);    
}
}

خروجی:تصویر(2)

jspinner در جاوا

توضیحات:

SpinnerModel value = new SpinnerNumberModel(5, 0, 10, 1);
 
•    برای ایجاد یک مدل داده ای برای Spinner خود از کلاس SpinnerModel شی ایجاد می‌کنیم.
•    پارامتر سازنده کلاس SpinnerModel به ترتیب عبارت است از :
1.    عدد 5 برای مقداردهی اولیه به Spinner است. هنگام نمایش Spinner مقدار انتخاب شده پیشفرض آن 5 است.
2.    عدد 0 minimum مقدار Spinner ما است. یعنی مقدار Spinner را نمی‌توانیم کمتر از عدد صفر تغییر دهیم.
3.    عدد 10 maximum مقدار Spinner ما است. یعنی مقدار Spinner را نمی‌توانیم بیشتر از عدد ده تغییر دهیم.
4.    با توجه به موارد 2 و 3، محدوده مقادیر Spinner ما بین 0 تا 10 است و تنها در این بازه می‌توانیم مقادیر Spinner را تغییر دهیم.
5.    عدد 1 گام‌‌‌‌های تغییر مقدار Spinner ما را تعیین می‌کند. مثلا عدد 1 باعث می‌شود یکی یکی مقادیر Spinner خود را تغییر دهیم. اگر مثلا عدد 3 بود سه تا سه تا مقادیر Spinner تغییر میکرد.

JSpinner spinner = new JSpinner(value);


•    از کلاس JSpinner شی ایجاد کرده و شی value که از نوع SpinnerModel است و مدل داده ای Spinner را مشخص می‌کند به عنوان پارامتر به سازنده کلاس JSpinner داده ایم.
1.               spinner.setBounds(100,100,50,30);    
2.                f.add(spinner);    
3.                f.setSize(300,300);    
4.                f.setLayout(
null);    
5.                f.setVisible(
true);    

1.    تعیین مختصات و ابعداد spinner
2.    اضاف کردن spinner به فریم
3.    تعیین اندازه فریم
4.    چون فعلا از طرح بندی خاصی استفاده نکردیم مقدار پارامتر این متد را null قرار می‌دهیم.
5.    برای نمایش فریم و تمام اجزای گرافیکی از این متد استفاده می‌کنیم.

مثال:
package java like ;

import javax.swing.*;
import javax.swing.event.*;

public class SpinnerExample {
 
public static void main(String[] args) {
       JFrame f =
new JFrame("Spinner Example");
       final JLabel label =
new JLabel();
       label.setHorizontalAlignment(JLabel.
CENTER);
       label.setSize(250, 100);
       SpinnerModel value =
new SpinnerNumberModel(5, // initial value
               0, // minimum value
               10, // maximum value
               1); // step
       JSpinner spinner = new JSpinner(value);
       spinner.setBounds(100, 100, 50, 30);
       f.add(spinner);
       f.add(label);
       f.setSize(300, 300);
       f.setLayout(null);
       f.setVisible(true);
       spinner.addChangeListener(
new ChangeListener() {
        
public void stateChanged(ChangeEvent e) {
               label.setText(
"Value : "
                       + ((JSpinner) e.getSource()).getValue());
           }
       });
   }
}

خروجی: تصویر(3)

کاربرد spinner در جاوا

توضیحات:
1.    label.setHorizontalAlignment(JLabel.CENTER);
2.    label.setSize(250, 100);


1.    با این دستور label ما در وسط مختصات افقی در فریم قرار میگیرد.
2.    تعیین اندازه label
 
spinner.addChangeListener(new ChangeListener() {
           public void stateChanged(ChangeEvent e) {
               label.setText(
"Value : "
                       + ((JSpinner) e.getSource()).getValue());
           }
       });
•    متد addChangeListener برای افزودن یک ChangeListener به spinner ما کاربرد دارد.
•    ChangeListener یک اینترفیس است که از طریق متد stateChanged که در بدنه آن قرار دارد رویداد‌‌‌‌های مربوط به تغییر مقدار spinner را دریافت می‌کند.
•    با هر بار رخ دادن رویدادی روی spinner متد stateChanged صدا زده می‌شود و دستورات درون آن اجرا می‌شود.

label.setText("Value : "+ ((JSpinner) e.getSource()).getValue());

•    این دستور مقدار انتخاب شده spinner را درون label نمایش می‌دهد.
•    خب چطور این کار انجام می‌شود؟!
وقتی رویدادی رخ می‌دهد درون شی e که از نوع کلاس ChangeEvent هستش ریخته می‌شود.حال ما از طریق شی e متد getSource را صدا زده ایم، این متد همون طور که از اسمش پیداست میگرده منبع رویداد ( منظور همون اجزای گرافیکی که رویدادی روی آن آنها اتفاق افتاده است) را پیدا میکند و بصورت یک شی از نوع کلاس Object (پدر همه کلاس هاست) برمیگرداند. یک مشکل کوچک پیش اومده! مقدار برگردانده شده از نوع کلاس Object است و از طرفی اجزای گرافیکی ما از نوع کلاس JSpinner هستش! چکار باید کنیم؟! باید شی از نوع کلاس Object را به شی از نوع کلاس JSpinner تبدیل می‌کنیم. چگونه؟ با استفاده از روش casting یا تبدیل نوع، به سادگی نوع کلاس خود را درون پرانتز در کنار شی کلاسی که قصد داریم آن را تبدیل کنیم قرار می‌دهیم. مثلا در اینجا کلاس JSpinner درون پرانتز در کنار e.getSource که شی کلاس Object را برمیگرداند قرار داده ایم. حالا بعد از تبدیل شی از نوع کلاس Object به شی از نوع کلاس JSpinner به راحتی می‌توانیم متد getValue را صدا بزنیم.متد getValue مقدار انتخاب شده Spinner را برمی گرداند.
حال از طریق شی label متد setText را صدا زده و رشته "Value : " همراه با مقدار spinner را درون لیبل نمایش می‌دهیم.
•    اگر توضیحات گیج کننده بود نگران نباشید!! تنها با نگاه کردن به کد و تغییر دادن کد روش کار دستتون میاد. شما میگید مثال رو نگاه کن و دستکاری کن! تا یاد بگیری! مثلا چکار کنم؟! ی نمونه دستکاری که خودم انجام دادم که مفهوم دستور زیر رو یادبگیرم را در مثال بعدی نگاه کنید:

((JSpinner) e.getSource()).getValue()

مثال:
package java like ;

import javax.swing.*;
import javax.swing.event.*;

public class SpinnerExample {
   
public static void main(String[] args) {
       JFrame f = new JFrame("Spinner Example");
       SpinnerModel value =
new SpinnerNumberModel(5, // initial value
               0, // minimum value
               10, // maximum value
               1); // step
       JSpinner spinner =
new JSpinner(value);
       spinner.setBounds(100, 100, 50, 30);
       f.add(spinner);
       f.setSize(300, 300);
       f.setLayout(null);
       f.setVisible(true);
       spinner.addChangeListener(new ChangeListener() {
           
public void stateChanged(ChangeEvent e) {

               System.
out. print ln(e.getSource());
               System.
out. print ln((JSpinner) e.getSource());
               System.
out. print ln(((JSpinner) e.getSource()).getValue());
           }
       });
   }
}

خروجی: بعد از اجرای برنامه اگر مقدار spinner را به عدد 6 تغییر دهیم خروجی به صورت تصویر(4) خواهد بود:

گرافیک در جاوا
•    مقدار پیشفرض این spinner ابتدا 5 بود که به عدد 6 تغییر دادیم که نتیجه این تغییر در محیط کنسول به صورت زیر است:

خروجی در کنسول:

آموزش گرافیک در جاوا

•    خروجی سبز رنگ نتیجه دستور زیر است، خروجی سبز آدرس شی است که متد getSource برگردانده است.

System.out. print ln(e.getSource());

•    خروجی آبی رنگ نتیجه دستور زیر است، خروجی آبی آدرس شی بعد از عمل casting است.
System.out. print ln(((JSpinner) e.getSource()));

•    خروجی صورتی رنگ نتیجه دستور زیر است:
System.out. print ln(((JSpinner) e.getSource()).getValue());

توضیحات:
System.out. print ln(e.getSource());

•    این دستور منبعی که رویدادی روی آن رخ داده است را برمیگرداند و چاپ می‌کند.
•    متد getSource منبع رویداد رخ داده را برمی گرداند.
•    این منبع میتونه یک اجزای گرافیکی نظیر JSpinner و... باشد.
•    همان طور که در جلسات گذشته گفتیم کلاس Object پدر همه کلاس ها است. به عبارتی همه کلاس‌‌‌‌های درون جاوا زیر کلاس و فرزند کلاس Object است.
•    خب getSource شی که برمیگرداند از نوع کلاس Object است. این شی میتونه یکی از اجزای گرافیکی در جاوا باشد ولی نمی‌توانیم مستقیم به متدها و ویژگی‌‌‌‌های آن اجزای گرافیکی دسرسی داشته باشیم و باید حتما عمل casting را انجام دهیم. برای درک سطح دسرسی شی که این متد بدون عمل casting برای ما برمیگرداند تصویر(5) را مشاهده کنید:

متد getsource در جاوا

همان طور که در تصویر(5) مشاهده می‌کنید شی که این متد برمیگرداند فقط به ویژگیها و رفتار‌‌‌‌های کلاس Object دسرسی دارد و خبری از متدها و ویژگی‌‌‌‌های اجزای گرافیکی خاصی نیست! حال عمل casting را به صورت زیر انجام میدهیم:
System.out. print ln(((JSpinner) e.getSource()));

•    این دستور منبع رویدادی که متد getSource برمی گرداند را به شی از کلاس JSpinner تبدیل می‌کند.
•    حالا سطح دسرسی منبع دریافت شده و تبدیل آن به JSpinner را در تصویر(6) مشاهده کنید:

jspinner در جاوا
•    همان طور که در تصویر(6) مشاهده می‌کنید با عمل casting به انبوهی از متد‌‌‌‌های اجزای گرافیکی از جمله به متد getValue دسرسی داریم.
•    جالب است بدانید که خروجی دو دستور زیر شبیه به هم هستند اما در عمل متفاوت! :

System.out. print ln(e.getSource());
System.
out. print ln(((JSpinner) e.getSource()));
 
 
•    حال با صدا زدن متد getValue مقدار spinner را دریافت می‌کنیم:
System.out. print ln(((JSpinner) e.getSource()).getValue());
 

خب چطور بود؟! پیشنهاد میکنم هنوز مثال‌‌‌‌های بیشتری ببینید کسی با یکی دوتا مثال برنامه نویس نشده!

پیروز و موفق باشید

این جلسه آموزشی را می‌توانید بصورت کتاب الکترونیکی (PDF شده) در لینک زیر دریافت کنید.
این جلسه آموزشی را بصورت کامل و مرتب شده در لینک زیر دانلود کنید:(در صورت خرابی لینک گزارش دهید)

آموزش آسان و ساده زبان برنامه نویسی جاوا
لینک دانلود


نشر این مطلب با ذکر منبع (لینک سایت) بلامانع است.
برای با خبر شدن از جدیدترین مطالب آموزشی جاوا عضو کانال تلگرام ما شوید.


نظرات کاربران
*نام و نام خانوادگی
* پست الکترونیک
* متن پیام

بستن
*نام و نام خانوادگی
* پست الکترونیک
* متن پیام

0 نظر
گفتگو را شروع کنید
رزو مشاوره و تدریس خصوصی برنامه نویسی و سفارش انواع پروژه‌‌‌‌های برنامه نویسی