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

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

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

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


مثال:
package javalike;
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  javalike;

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 javalike;

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.println(e.getSource());
                System.
out.println((JSpinner) e.getSource());
                System.
out.println(((JSpinner) e.getSource()).getValue());
            }
        });
    }
}

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

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

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

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

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

 
System.out.println(e.getSource());

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

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

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

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

متد getsource در جاوا

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

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

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

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

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

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

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

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


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


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

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

0 نظر
طراحی سایتطراحی سایتسایت سازسایت سازفروشگاه سازفروشگاه ساز