BoxLayout

در مدل لایه بندی BoxLayout کنترل‌ها در یک ردیف یا یک ستون قرار می‌گیرند. کلاس BoxLayout دارای یک سازنده است و به صورت زیر مقداردهی می‌شود :

public BoxLayout(Container target, int axis)

Container همان کنترلی است که دیگر کنترل‌ها در آن قرار می‌گیرند و axis هم نحوه قرارگیری کنترل در Container است که به دو صورت زیر مقدار دهی می‌شود :

  • BoxLayout.X_AXIS
  • BoxLayout.Y_AXIS

برای درک بهتر عملکرد این کلاس به کد زیر توجه کنید :

   1: import java.awt.*;
   2: import javax.swing.*;
   3: 
   4: public class FrameDemo 
   5: {
   6:     public static void main(String[] args) 
   7:     {
   8:         JFrame frame1 = new JFrame("BoxLayout Demo"); 
   9:         frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);               
  10:         frame1.setFont(new Font("Helvetica", Font.PLAIN, 14));
  11:         
  12:         Container container =frame1.getContentPane();
  13:         container.add(new JButton("Button1"));
  14:         container.add(new JButton("Button2"));
  15:         container.add(new JButton("Button3"));
  16:         container.add(new JButton("Button4"));
  17: 
  18:         frame1.setLayout(new BoxLayout(container,BoxLayout.X_AXIS));
  19:         
  20:         frame1.setSize(430 ,315);
  21:         frame1.setVisible(true);
  22:     }   
  23: }

نکته ای که در کد بالا وجود دارد این است که چون کنترل‌ها به طور مستقیم به Frame اضافه نمی‌شوند در خط 12 یک Container ایجاد کرده‌ایم که اشاره به لایه ContentPane دارد. سپس در خطوط 16-13 چهار دکمه را به آن اضافه می‌کنیم. سپس در خط 18 نحوه قرارگیری کنترل‌ها در این Container را مشخص می‌کنیم. خروجی کد بالا به صورت زیر است :
boxlayout-demo-01
حال خط 18 کد بالا را به صورت زیر تغییر دهید :

frame1.setLayout(new BoxLayout(container,BoxLayout.Y_AXIS));

یک بار دیگر برنامه را اجرا و نتیجه را مشاهده نمایید :
boxlayout-demo-02

به این نکته توجه کنید که می‌توان خط 12 کد بالا را کاملاً حذف کرد و برای اضافه کردن دکمه‌ها به Frame به صورت زیر عمل کرد :

frame1.getContentPane().add(new JButton("..."));

و همچنین خط 18 کد بالا را به صورت زیر تغییر داد :

frame1.setLayout(new BoxLayout(frame1.getContentPane(),BoxLayout.Y_AXIS));