کنترل JSlider

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

public JSlider()
public JSlider(int orientation)
public JSlider(int minimum, int maximum)
public JSlider(int minimum, int maximum, int value)
public JSlider(int orientation, int minimum, int maximum, int value)
public JSlider(BoundedRangeModel model)

در زیر نحوه ایجاد و استفاده از JSlider و استفاده از متدهای آن آمده است :

   1: import javax.swing.*;
   2: 
   3: public class FrameDemo 
   4: {
   5:     public static void main(String[] args) 
   6:     {
   7:         final JFrame frame1 = new JFrame("JSpinner Demo");
   8:         JPanel Panel1 = new JPanel();
   9:         JSlider Slider = new JSlider(JSlider.HORIZONTAL,0,255,0);
  10:         Panel1.add(Slider);
  11:         frame1.add(Panel1);
  12:         
  13:         Slider.setMinorTickSpacing(10);
  14:         Slider.setMajorTickSpacing(50);
  15:         
  16:         Slider.setPaintLabels(true);
  17:         Slider.setPaintTicks(true);
  18:         
  19:         frame1.setSize(364 , 146);
  20:         frame1.setVisible(true);          
  21:     }   
  22: }

در خط 9 کد بالا یک Slider ایجاد کرده ایم و در داخل سازنده نحوه نمایش Slider به صورت افقی (JSlider.HORIZONTAL) مشخص شده است . عدد 0 و 255 هم بازه ای است که اسلایدر می گیرد و عدد 0 آخر هم نقطه شروع اسلایدر می باشد. در خطوط 17-13 هم این اسلایدر را درجه بندی کرده ایم. از متد ()setMajorTickSpacing ایجاد درجه های بزرگ بر روی Slider و از متد ()setMinorTickSpacing برای ایجاد درجه های کوچک در بین دو درجه بزرگ و از متد های ()setPaintLabels و ()setPaintTicks برای نمایش درجه ها و برچسب های آنها استفاده می شود. برنامه را اجرا و نتیجه را مشاهده کنید :
JSlider-in-java-01
توصیه می شود که مقادیر موجود در سازنده (خط 9) و متدهای خطوط 13 و 14 را تغییر داده تا عملکرد این آنها را بهتر درک کنید. همچنین مقادیر true خطوط 17 و 16 را به false تغییر داده تا کاربرد این دو متد را متوجه شوید. حا اجازه دهید که یک برنامه بنویسیم که دارای سه Slider باشد و با تغییر مقادیر Slider ها رنگ پس زمینه یک Panel تغییر کند. به کد زیر توجه کنید :

   1: import java.awt.*;
   2: import javax.swing.*;
   3: import javax.swing.event.*;
   4: 
   5: public class FrameDemo 
   6: {
   7:     public static void main(String[] args) 
   8:     {
   9:         final JFrame frame1 = new JFrame("JSlider Demo");
  10:         frame1.setLayout(new BorderLayout());
  11: 
  12:         JPanel Panel1 = new JPanel();
  13:         Panel1.setLayout(new GridLayout(3,2));
  14: 
  15:         JLabel Label1 = new JLabel ("RED");
  16:         JLabel Label2 = new JLabel ("GREEN");
  17:         JLabel Label3 = new JLabel ("BLUE");
  18:                 
  19:         final JSlider SliderGreen  = new JSlider(JSlider.HORIZONTAL,0,255,0);
  20:         final JSlider SliderRed    = new JSlider(JSlider.HORIZONTAL,0,255,0);
  21:         final JSlider SliderBlue   = new JSlider(JSlider.HORIZONTAL,0,255,0);
  22:         SliderGreen.setMinorTickSpacing(15);
  23:         SliderRed.setMinorTickSpacing(15);
  24:         SliderBlue.setMinorTickSpacing(15);
  25:         SliderGreen.setPaintTicks(true);
  26:         SliderRed.setPaintTicks(true);
  27:         SliderBlue.setPaintTicks(true);
  28: 
  29:         Panel1.add(Label1);
  30:         Panel1.add(SliderRed);        
  31:         Panel1.add(Label2);
  32:         Panel1.add(SliderGreen);
  33:         Panel1.add(Label3);
  34:         Panel1.add(SliderBlue);
  35: 
  36:         final JPanel Panel2 = new JPanel();
  37:         Panel2.setPreferredSize(new Dimension(0,150));
  38:         Panel2.setBackground(Color.BLACK);
  39:                
  40:         frame1.add(Panel1,BorderLayout.CENTER);
  41:         frame1.add(Panel2,BorderLayout.SOUTH);
  42:         
  43:         class ColorPicker implements ChangeListener 
  44:         {
  45:             public void stateChanged(ChangeEvent changeEvent) 
  46:             {
  47:                 int red = SliderRed.getValue();
  48:                 int green = SliderGreen.getValue();
  49:                 int blue = SliderBlue.getValue();                
  50:                 Color color = new Color(red,green,blue);
  51:                 Panel2.setBackground(color);
  52:             }
  53:         }
  54:         
  55:         SliderGreen.addChangeListener(new ColorPicker());
  56:         SliderRed.addChangeListener(new ColorPicker());
  57:         SliderBlue.addChangeListener(new ColorPicker());
  58: 
  59:         frame1.setSize(450 , 300);
  60:         frame1.setVisible(true);          
  61:     }   
  62: }

در خط 9 کد بالا یک Frame ایجاد کرده ایم و در خط 10 نحوه لایه بندی آن را BorderLayout قرار داده ایم تا بتوانیم دو پنل را در وسط و پایین آن قرار دهیم. در خط 12 اولین پنل را ایجاد و در خط 13 آن را به 3 سطر و دو ستون تقسیم کرده ایم. در خطوط 17-15 سه Label ایجاد کرده ایم. در خطوط 27-19 سه Slider ایجاد و مقادیر آنها را بین 255-0 قرار داده ایم. چون کد رنگ ها در همین بازه قرار دارند. مثلا رنگ کد سیاه (0,0,0) و کد رنگ سفید (255,255,255) می باشد. در خطوط 34-29 Label و Slider ها را به Panel اولی اضافه می کنیم. در خطوط 38-36 Panel دوم را ایجاد کرده و یک ارتفاع به ان می دهیم و رنگ پیشفرض پس زمینه آن را سیاه می دهیم. چون زمانی که برنامه را اجرا می کنیم در حالت پیشفرض کل Slider ها مقدار 0 دارند و این کد رنگ سیاه است :
JSlider-in-java-02

هنگام که دستگیره Slider به دو طرف حرکت می دهیم در اصل رابط ChangeListener پیاده سازی می شود. این رابط را در خط 43 توسط یک کلاس پیاده سازی م یکنیم و در داخل بدنه متد ()stateChanged این رابط کدهای زیر را می نویسیم :

int red = SliderRed.getValue();
int green = SliderGreen.getValue();
int blue = SliderBlue.getValue();                
Color color = new Color(red,green,blue);
Panel2.setBackground(color);

در کدهای بالا با استفاده از متد()getValue مقادیر هر یک از Slider ها را می گیریم. این مقادیر از نوع صحیح هستند. سپس همین مقادیر را در خط 50 به به سازنده کلاس Color ارسال می کنیم. وظیفه این کلاس ایجاد رنگ است. سپس یک شی از این کلاس را به متد ()setBackground در خط 51 می دهیم تا رنگ را بر روی Panel دومی اعمال کند. و در آخر یک شی از کلاسی که رابط را پیاده سازی می کند یعنی ColorPicker (خط 43) به متد ()addChangeListener در خطوط 57-55 ارسال می کنیم.برنامه را اجرا و دستگیره های Slider ها را جابه جا و نتیجه را مشاهده کنید.

JSlider-in-java-03