کنترل JSpinner

کنترل JSpinner عموما برای دریافت اعداد از ورودی و محدود کردن کاربران برای وارد کردن مقادیر عددی بکار می رود. کنترل JSpinner از لحاظ شکل ظاهری شبیه به کنترل TextBox است با این تفاوت که دکمه هایی به شکل پیکان در سمت چپ یا راست آن برای افزایش و یا کاهش مقدار کنترل وجود دارند.مقدار عددی کنترل JSpinner می تواند از نوع اعشاری یا صحیح باشد. سازنده این کلاس به روش های زیر مقداردهی می شود :

public JSpinner()
public JSpinner(SpinnerModel model)

حال می خواهیم یک برنامه بسازیم که کنترل JSpinner در آن بکار رفته باشد. به کد زیر توجه کنید :

   1: import java.awt.*;
   2: import javax.swing.*;
   3: import java.awt.event.*;
   4: 
   5: public class FrameDemo 
   6: {
   7:     public static void main(String[] args) 
   8:     {
   9:         final JFrame frame1 = new JFrame("JSpinner Demo");
  10:         frame1.setLayout(new BorderLayout());
  11:         
  12:         JPanel Panel1 =  new JPanel();
  13:         JPanel Panel2 =  new JPanel();
  14:         Panel1.setLayout(new GridLayout(2,2));
  15:         
  16:         JLabel label1 = new JLabel("Price");
  17:         JLabel label2 = new JLabel("Quantity");
  18:         
  19:         SpinnerNumberModel Pricemodel   = new SpinnerNumberModel(0,0,10000,0.5);
  20:         final JSpinner SpinnerUpDownPrice    = new JSpinner(Pricemodel);
  21:         SpinnerNumberModel Quantitymodel    = new SpinnerNumberModel(0,0,100,1);
  22:         final JSpinner SpinnerUpDownQuantity = new JSpinner(Quantitymodel);
  23:         
  24:         JButton Button1 = new JButton("Culculate");
  25:         
  26:         Panel1.add(label1);
  27:         Panel1.add(SpinnerUpDownPrice);
  28:         Panel1.add(label2);
  29:         Panel1.add(SpinnerUpDownQuantity);
  30:         Panel2.add(Button1);
  31:         frame1.add(Panel1,BorderLayout.CENTER);
  32:         frame1.add(Panel2,BorderLayout.SOUTH);
  33:               
  34:         class MyItemListener implements ActionListener
  35:         {
  36:             public void actionPerformed(ActionEvent e)
  37:             {
  38:                 double price = (double)SpinnerUpDownPrice.getValue();
  39:                 int quantity = (int)SpinnerUpDownQuantity.getValue();
  40:                 double total;
  41: 
  42:                 total = price * quantity;
  43:                 
  44:                 JOptionPane.showMessageDialog(frame1,"The total price is " + total);
  45:             }
  46:         }
  47: 
  48:         Button1.addActionListener(new MyItemListener() );
  49:         
  50:         frame1.setSize(364 , 146);
  51:         frame1.setVisible(true);          
  52:     }   
  53: }

در کد بالا و در خطوط 32-9 کار خاصی انجام نداده ایم. فقط یک Frame ، دو Panel، دو Label، دو JSpinner با نام های SpinnerUpDownPrice و SpinnerUpDownQuantity و یک دکمه ایجاد کرده ایم. می توان گفت که تنها نکته کد بالا در خطوط 19 و 21 نهفته است. در حالت پیشفرض با زدن دکمه های پایین و بالای JSpinner یک واحد از مقدار پیشفرض آن یعنی صفر، کم یا یک واحد به آن اضافه می شود. برای محدود کردن کاربران به یک محدود خاص از اعداد از کلاس SpinnerNumberModel استفاده می شود. این کلاس ورودی هایی که توسط کاربر در JSpinner وارد می شود را محدود می کند. همانطور که در کد بالا مشاهده می کنید سازنده این کلاس 4 پارامتر می گیرد که اولین عدد مبنای شروع افزایش و کاهش عدد JSpinner، دو عدد بعدی محدوده ای است که ورودی های کاربر در آن قرار می گیرند و چهارمین عدد هم مقدار افزایش و کاهش عدد JSpinner است. این اعداد همگی می توانند هم double و هم int باشند. در خطوط 20 و 22 هم اشیاء ساخته شده از این کلاس را به سازنده کنترل JSpinner ارسال کرده ایم تا محدودیت ها را بر روی آنها اعمال کند.
در خط 19 آخرین پارامتر Pricemodel برابر با 0.50 قرار داده ایم ، بنابراین مقدار SpinnerUpDownPrice به اندازه 0.50 واحد کم یا زیاد می شود. مقدار سومین پرامتر یعنی نهایت عددی که کاربر می تواند وارد کند 10000 است ، پس قیمت (Price) به آن محدود می شود و کاربر نمی تواند رقمی بالاتر از آنرا وارد کند.
از آنجاییکه نهایت مقدار Quantitymodel را برابر 100 قرار داده ایم بنابراین شما می توانید فقط مقادیری نهایتا تا 100 را در SpinnerUpDownQuantity وارد کنید. چون می خواهیم با وارد کردن دو مقدار در دو JSpinner و سپس زدن دکمه پیامی نمایش داده شود باید رویداد کلیک دکمه را مدیریت کنیم. این کار را در خطوط 48-34 انجام داده ایم. در خطوط 38 و 39 مقادیری را که در دو JSpinner توسط کاربر وارد شده است را توسط متد ()getValue به دست می آوریم و سپس با عمل cast به نوع double و int تبدیل می کنیم. سپس در خط 42 حاصلضرب این دو مقدار را در متغیر total ریخته و مقدار این متغیر را در خط 44 چاپ می کنیم :
jspinner-in-java-01