BorderLayout
BorderLayout مدیر لایه پیشفرض contentPan کلاسهای JFrame ،JWindow ،JDialog ،JInternalFrame و JApplet بوده و دارای پنج منطقه چپ، راست، بالا، پایین و مرکز میباشد. یعنی کنترلها را میتوان در این پنج منطقه قرار داد. بسته به اندازه ویندوز این پنج منطقه تغییر اندزاه میدهند و کل صفحه را پوشش میدهند. اگر یک کنترل به Frame اضافه کرده و منطقه آن را مشخص نکنید به طور پیشفرض در وسط فریم قرار میگیرد و اگر چندین کنترل را به یک منطقه اضافه کنید آخرین کنترل اضافه شده نمایش داده میشود. کلاس BorderLayout دارای دو سازنده زیر میباشد :
public BorderLayout() public BorderLayout(int hgap, int vgap)
مناطقی که میتوان هنگام اضافه کردن کنترل به Container مشخص کرد، عبارتند از :
- CENTER
- EAST
- NORTH
- SOUTH
- WEST
برای آشنایی بیشتر با عملکرد این کلاس به کد زیر توجه کنید :
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("BorderLayout Demo"); 9: frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 10: 11: frame1.setLayout(new BorderLayout()); 12: frame1.setFont(new Font("Helvetica", Font.PLAIN, 14)); 13: frame1.add(new JButton("North"), BorderLayout.NORTH); 14: frame1.add(new JButton("South"), BorderLayout.SOUTH); 15: frame1.add(new JButton("East"), BorderLayout.EAST); 16: frame1.add(new JButton("West"), BorderLayout.WEST); 17: frame1.add(new JButton("Center"), BorderLayout.CENTER); 18: 19: frame1.setSize(430 ,315); 20: frame1.setVisible(true); 21: } 22: }
نتیجه اجرای کد بالا به صورت زیر است :
برای ایجاد فاصله بین این قسمتها هم در قسمت سازنده مقادیری از نوع عدد صحیح مینویسید.vgap فاصله عمودی و hgap فاصله افقی از دیگر کنترلها میباشد. مثلاً خط 8 کد بالا را به صورت زیر تغییر دهید :
setLayout(new BorderLayout(5,8));
بعد از اجرای دوباره برنامه فاصلههایی که تعیین کردهاید در بین قسمتها قابل مشاهده است :
اگر بخواهید چند کنترل را در یک ناحیه قرار دهید، ابتدا باید آنها را به یک Container اضافه کرده و ناحیه آنها را در آن مشخص کنید و سپس Container را به مثلاً Frame اضافه کرده و ناحیه آن را مشخص کنید. فرض کنید که میخواهیم یک Label و یک textfield را در ناحیه بالای فریم اضافه کنیم. ابتدا باید آنها را به یک Panel اضافه کرده و سپس Panel را به Frame اضافه کنیم. به کد زیر توجه کنید :
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("BorderLayout Demo"); 9: frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 10: frame1.setLayout(new BorderLayout()); 11: frame1.setFont(new Font("Helvetica", Font.PLAIN, 14)); 12: 13: JPanel topPanel = new JPanel(new BorderLayout()); 14: JLabel label = new JLabel("Name: "); 15: JTextField text = new JTextField(); 16: topPanel.add(label, BorderLayout.WEST); 17: topPanel.add(text, BorderLayout.CENTER); 18: frame1.add(topPanel, BorderLayout.NORTH); 19: 20: frame1.setSize(430 ,315); 21: frame1.setVisible(true); 22: } 23: }
همانطور که در کد بالا مشاهده میکنید ابتدا در خط 13 یک Panel ایجاد کرده و مدیر لایه آن را BorderLayout قرار میدهیم. سپس در خطوط 14 و 15 یک Label و یک TextField ایجاد کرده و آنها را در خط 16 و 17 در قسمت چپ و وسط Panel قرار میدهیم. سپس Panel را در خط 18 به قسمت بالای Frame اضافه کردهایم. خروجی کد بالا به صورت زیر است :