کلاس JLayeredPane بخش از کلاس JRootPane است که در فراتـر از یـک لایـه بـوده و کـانتینری اسـت کـه نقـش مـدیریت مجموعه ای از لایه ها و کامپوننت های موجود در آنها را بر عهده دارد. در این جلسه روش استفاده از کلاس JLayeredPane را آموزش می دهیم.
کلاس JLayeredPane
با توجه به مطالب قبل دریافتیم که کلاس JLayeredPane بخش از JRootPane می باشد. در واقع این JLayeredPane فراتـر از یـک لایـه بـوده و کـانتینری اسـت کـه نقـش مـدیریت مجموعه ای از لایه ها و کامپوننت های موجود در آنها را بر عهده دارد.
نحوه قرار گیری لایـه هـا در این بخش با توجه به اولویت آنها تعیین می شود. به عبارت دیگر هر لایه دارای یک شماره می باشد و در نتیجه هر لایه ای که شماره آن کوچک تر باشد، بالاتر از سایر لایه ها قرار می گیرد. در هنگام اضافه کردن کامپوننت ها به فریم، اگر بخواهیم تعیین کنیم که هـر کامپوننـت در کـدام لایه قرار گیرد، کافیست از متد زیر که دارای دو آرگومان ورودی میباشد، استفاده نماییم.
JFrame f = new JFrame();
JLayeredPane lp = f.getLayeredPane();
lp.add(button, new Integer(1));
همانطور که می بینید در تکه کد قبل یک دکمه به لایه شماره 1 افـزوده شـده اسـت . بـرای درك بهتر، برنامه زیر را با دقت بررسی نمایید. خروجی برنامه بصورت زیر می باشد.
import javax.swing.*;
import java.awt.Color;
public class SimpleLayers {
public static void main(String[] args) {
// Create a frame & gets its layered pane
JFrame f = new JFrame();
JLayeredPane lp = f.getLayeredPane(); // Create 3 buttons
JButton top = new JButton("1");
top.setBackground(Color.white);
top.setBounds(20, 20, 50, 50);
JButton middle = new JButton("2");
middle.setBackground(Color.red);
middle.setBounds(50, 50, 50, 50);
JButton bottom = new JButton("3");
bottom.setBackground(Color.yellow);
bottom.setBounds(78, 78, 50, 50); // Place the buttons in different layers
lp.add(middle, new Integer(2));
lp.add(top, new Integer(3));
lp.add(bottom, new Integer(1)); // Show the frame
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(160, 180); f.setVisible(true);
}
}
همانطور که در تصویر فوق مشاهده می کنید، سه دکمه با رنگ های سفید، قرمز و زرد به ترتیب در سه لایه مختلف (لایه 1 ،لایه 2 ،لایه 3 ) قرار داده شده اند. با اجرای برنامه متوجه خواهید شد کـه سه دکمه روی یکدیگر قرار دارند. حال سعی کنید که شماره لایه دو تا از دکمه ها را یکی کنیـد و نتیجه را با وضعیت فعلی مقایسه نمایید. دقت کنید که حتما نیاز نیست شماره لایه ها از یک شروع شده و به ترتیب نیز باشند. بلکه می توانید از هر شماره دیگر دلخواه نیـز شـروع کـرده و فقـط بایـد شماره ها متفاوت باشند. مثلا می توانستیم به جای سه شماره فوق به ترتیـب 10 ، 20 و 30 قـرار دهیم.
کنترل دکمه Close یا ضربدر بالای فریم
نکتــــه مهــــم دیگــــر کــــه در کــــدهای بــــالا نیــــز وجــــود دارد اســــتفاده از متــــد setDefaultCloseOperation می باشد. استفاده از این متد سبب می شود تـا زمـانی که کاربر بر روی دکمه close بالای فریم کلیک کند، فریم بسته می شود. این متـد دارای چهـار آرگومان ورودی می باشد که JDialog استفاده شوند، عبارتند از :
DO_NOTHING_ON_CLOSE
با ارسال این آرگومان به متد فوق، وقتی کاربر بر روی دکمه close کلیک کند، هیچ اتفاقی نمی افتد و فرم بسته نخواهد شد.
DO_NOTHING_ON_CLOSE
با ارسال این آرگومان به متد فوق، وقتی کاربر بر روی دکمه close کلیک کند، هیچ اتفاقی نمی افتد و فرم بسته نخواهد شد.
HIDE_ON_CLOSE
این آرگومان، مقدار پیش فرض متد فوق می باشد. با انتخاب این مقدار در واقـع زمـانی کـه کـاربر دکمه close را کلیک می کند، فریم بسته نمی شود بلکه مخفی می شود «Hide «و می تـوان در مراحل بعد دوبار آن فریم را به کمک متدهای دیگر نمایش داد.
DISPOSE_ON_CLOSE
این مقدار سبب بسته شدن فریم می شود. علاوه بر بستن فریم مورد نظر، تمامی منابع سیستم کـه در اختیار فریم است نیز آزاد شده و به سیستم باز گردانده می شوند.
EXIT_ON_CLOSE
با ارسال این آرگومان به متد، برنامه خاتمه می یابد. این آرگومان معادل دستور زیر عمل می کند
system.exit(0);