فریم ها اصلی ترین مفهوم در رابط گرافیکی جاوا هستند، در این جلسه به بررسی ساختار فریم ها در برنامه نویسی گرافیکی جاوا می پردازیم. 

ساختار یک فریم در جاوا را می توان از دو دیدگاه مورد بررسی قرار داد:

  • دیدگاه ظاهر فریم
  • دیدگاه لایه بندی فریم

دیدگاه ظاهر فریم

یک فریم از لحاظ ظاهری از یکسری دکمه، عنـوان فـریم، آیکـون فـریم و حاشـیه یـا Border تشکیل شده است. این بعد از ساختار فریم ها نیاز به توضیح زیادی ندارد .

دیدگاه لایه بندی فریم

قبل از هرگونه توضیحی به دقت به شکل زیر توجه نمایید:

ساختار JlayeredPane

یک فریم در ظاهر دارای یک لایه می باشد ولی همانطور که می بینیم این نظریه درست نبوده و یک فریم دارای چهار لایه اصلی زیر می باشد:

  • Root Pane
  • Layered Pane
  • Content Pane
  • Glass Pane

اولین نکته بسیار مهم، با توجه به مطالب بالا، آن اسـت کـه نمـی تـوان ماننـد AWTبـه صـورت مستقیم سایر کامپوننت های Swingرا به JFrame اضـافه نمـود. در JFrameهـا، معمـولا کامپوننت هـای  swingبـه  Content Pane اضـافه مـی شـوند و بطـور مسـتقیم بـه خـود JFrame اضافه نمی شوند. در واقع یک فریم از چند قاب یا Paneمجزا تشـکیل شـده اسـت و بهتر است که در هنگام اضافه کردن سایر کامپوننت های دیگر به آن، مشخص کنیم که قـرار اسـت کامپوننت مورد نظر به کدام قاب اضافه شود.

برای درک بهتر این قضیه کمی عمیق تر به این نکتـه می پردازیم:

یک  JFrame در واقع یک کانتینر سطح بالا (Top Level Container) می باشد. این نـوع کامپوننـت هـا دارای یـک نمونـه از کامپوننـت JRootPaneمـی باشـند . خـود  JRootPane شامل دو کامپوننت  glassPane  ، JPanel و  JLayeredPane . می باشد.

اگر باز عمیق تر نگـاه کنـیم JlayeredPane از دو کامپوننـت    JMenuBar تشکیل شده اند:

JMenuBar

پس به طور خلاصه و در یک جمله می توان گفت که کامپوننت های Swing به صـورت مسـتقیم به JFrame اضافه نمی شوند بلکه به یکی از قاب های آن اضافه می شوند. در ادامه بـه کمـک دو برنامه نشان خواهیم داد که چگونه می تـوان در قـاب هـای مختلـف یـک فـریم، کامپوننـت هـای swing را اضافه نمود.

برنامه شماره ۱ – اضافه کردن کامپوننت های swing به content pane

import javax.swing.JFrame;
import javax.swing.JLabel;
public class TJFrame {
public static void main(
String[] args) {
JFrame frame = new JFrame("Swing Frame"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabel label = new JLabel("Add A JLable To contentPane", JLabel.CENTER); frame.getContentPane().add(label);
frame.setSize(350, 200);
frame.setVisible(true);
}
}

خروجی این برنامه بصورت زیر می باشد.

برنامه شماره ۲ – اضافه کردن کامپوننت های swing به Glass pane

در این برنامه سه دکمه وجود دارد که دوتای آنها به contentPane و سومی به glassPane اضافه شده است. همانطور که در اولین شکل این مقاله می بینید، glassPane  اولین لایه بوده و روی سایر لایه ها قرار دارد.

اگر برنامه زیر را اجرا نمایید و به خروجی آن دقت کنید، خواهیـد دیـد که دکمه ای که به glassPane اضافه شده ا ست روی دو دکمه دیگر قرار دارد و این امـر نشـان دهنده بحث لایه بندی در فریم ها می باشد.

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class MainClass3 {
public static void main(String[] args) {
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final JPanel p1 = new JPanel();
p1.add(new JLabel("GlassPane Example"));
JButton show = new JButton("Show"); p1.add(show); p1.add(new JButton("No-op")); f.getContentPane().add(p1);
final JPanel glass = (JPanel)f.getGlassPane(); glass.setVisible(true); glass.setLayout(new GridBagLayout()); JButton glassButton = new JButton("Hide");
glass.add(glassButton);
f.setSize(180, 100);
f.setVisible(true);
show.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
glass.setVisible(true); p1.repaint(); }
});
glassButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
glass.setVisible(false); p1.repaint();
}
});
}
}

خروجی برنامه به صورت زیر است :

در جلسات بعدی مطالب تکمیلی راجع به فریم ها و لایه بندی در رابط گرافیکی جاوا ارائه خواهد شد…

نمایش قابل چاپ