PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : آموزشی برنامه نویسی جاوا



*AM@NDA*
16th May 2010, 10:48 PM
بررسی ساختار فریم ها در جاوا



ساختار یك فریم در جاوا را می توان از دو دیدگاه مورد بررسی قرار داد. 1- دیدگاه ظاهر فریم 2- دیدگاه لایه بندی فریم

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

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

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

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


JFrame Layer


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

1- Root Pane 2- Layered Pane 3- Content Pane 4- Glass Pane

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

برای درك بهتر این قضیه كمی عمیق تر به این نكته می پردازیم. یك JFrame در واقع یك كانتینر سطح بالا یا top-level container می باشد. این نوع كامپوننت ها دارای یك نمونه از كامپوننت JRootPane می باشند. خود JRootPane شامل دو كامپوننت JPanel glassPane و JLayeredPane می باشد. اگر باز عمیق تر نگاه كنیم JLayeredPane از دو كامپوننت JMenuBar و JPanel contentPane تشكیل شده است.

jframe layers

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

«برنامه شماره 1» اضافه كردن كامپوننت های 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_CLOS E);
JLabel label = new JLabel("Add A JLable To contentPane", JLabel.CENTER);
frame.getContentPane().add(label);
frame.setSize(350, 200);
frame.setVisible(true);
{
{






«برنامه شماره 2» اضافه كردن كامپوننت های 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");glassPane
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();
}
});
}
}




با توجه به مطالب قبل دریافتیم كه كلاس 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");JLayeredPane
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 استفاده شوند) :

1- DO_NOTHING_ON_CLOSE

با ارسال این آرگومان به متد فوق، وقتی کاربر بر روی دکمه close كلیك كند، هیچ اتفاقی نمی افتد و فرم بسته نخواهد شد.

2- HIDE_ON_CLOSE

این آرگومان، مقدار پیش فرض متد فوق می باشد. با انتخاب این مقدار در واقع زمانی كه كاربر دكمه close را كلیك می كند، فریم بسته نمی شود بلكه مخفی می شود «Hide» و می توان در مراحل بعد دوبار آن فریم را به كمك متدهای دیگر نمایش داد.

3- DISPOSE_ON_CLOSE

این مقدار سبب بسته شدن فریم می شود. علاوه بر بستن فریم مورد نظر، تمامی منابع سیستم كه در اختیار فریم است نیز آزاد شده و به سیستم باز گردانده می شوند.

4- EXIT_ON_CLOSE

با ارسال این آرگومان به متد، برنامه خاتمه می یابد. این آرگومان معادل دستور زیر عمل می كند.


system.exit(0);

*AM@NDA*
16th May 2010, 10:56 PM
JFrame چیست و چگونه می توان یك JFrame ایجاد نمود؟


مانطور كه می دانید، مهمترین عنصر و به عبارت دیگر نقطه شروع طراحی یك برنامه ویژوالی در جاوا، ایجاد یك فرم یا فریم یا پنجره می باشد كه سایر اجزا برنامه، بر روی آن قرار می گیرد. یک Frame، نمونه ای ازکلاس JFrame می باشد که همانند یک ظرف «Container»، دیگر کامپوننت های Swing مانند JTextField ،jCheckBox و ... را در خود نگهداری می كند. یک Frame پنجره ای است که دارای نوار عنوان «Title bar»، دکمه هایی برای تغییر سایز و بستن فریم و امکانی برای قراردادن آیکون در نوار عنوان است. Frame ها از لحاظ ویژوالی یا بصری، در بالاترین سطح كلاس های swing قرار دارند.

JFrame

بهتر است قبل از مطالعه ادامه مقاله ابتدا از بخش دانلود انتهای مقاله، برنامه ها این مقاله را دانلود نموده و برنامه Frame.java را اجرا نمایید. تصویر بالا نتیجه حاصل از اجرای این برنامه می باشد. البته دقت كنید كه برای اجرای این برنامه، ابتدا یك package با نام JFrame ایجاد نموده و فایل برنامه را در آن قرار دهید. سپس برنامه را اجرا كنید. در صورتیكه نمی خواهید package ی ایجاد نمایید، خط اول برنامه كه نشان دهنده package مورد استفاده می باشد را از كد برنامه حذف نمایید.

كد برنامه فوق به شرح زیر می باشد:

package JFrame;


import javax.swing.*;
public class Frame extends JFrame{
public Frame(){
super("FrameDemo");
setVisible(true);
setSize(200,200);
}
public static void main(String[] args) {
new Frame();
}
}

پس از بررسی برنامه فوق در می یابیم كه:

******************************

1. ایجاد یک فریم

برای تشکیل یک فریم می توان به دو شیوه عمل کرد:

اولین روش ارث بردن کلاس اصلی برنامه از كلاس JFrame است. برای انجام اینكار بصورت زیر عمل می نماییم:







دومین روش تعریف شئ ای از کلاس JFrame به صورت زیر می باشد:







******************************
2. اضافه کردن عنوان به یک فریم

همانطور که در قسمت قبل دیدیم، به دو صورت می توان یک فریم را ایجاد نمود. بسته به اینکه از کدام روش استفاده کنیم، دو شیوه متفاوت برای تعیین عنوان یک فریم وجود دارد. اگر فریم توسط روش اول ایجاد شده باشد، می توان به وسیله به کارگیری متد ()super در متد سازنده کلاس، عنوان فریم را تعیین نمود:



public class Frame extends JFrame{

public Frame(){

super("FrameDemo");

...

}

}

اگر در كلاسی كه از یك كلاس دیگر ارث برده است، از متد super استفاده نمایید، در واقع متد سازنده كلاس پدر را مقداردهی كرده اید. برای درك بهتر این نكته، در اینجا کلاس برنامه یعنی کلاس Frame از کلاس JFrame ارث بری می کند و به وسیله متدsuper آن را مقدار دهی کرده است. این مقدار دهی سبب تعیین عنوان فریم می شود.

حال اگر توسط روش دوم یک فریم را ایجاد کرده باشید، می توانید به سادگی در متد سازنده، همان زمان که شئ کلاس را تعریف می نمایید، برای فریم نیز یك عنوان قرار دهید. به عبارت زیر توجه كنید:

JFrame frame = new JFrame("FrameDemo");

******************************
3. تعیین اندازه یک فریم

نكته مهم دیگر در ایجاد یك فریم، تعیین اندازه آن فریم می باشد. برای انجام این كار دو روش وجود دارد.

اول آنكه بصورت مستقیم و با كمك متد setSize اندازه فریم مورد نظر تعیین نمایید. به عبارت زیر توجه كنید:

...



...

دومین روش آن است كه اندازه فریم را بر اساس اندازه كامپوننت های درون آن تعیین كنید. یعنی بررسی كنید كه برای قرار گرفتن كامپوننت های مورد نیاز در فریم، چقدر فضا نیاز است. برای انجام چنین كاری می توان از متد pack بهره برد. نكته مهم در این متد آن است كه متد فوق تمامی بررسی های لازم را بصورت خودكار انجام داده و اندازه فریم را بر اساس محتویات آن تعیین می كند. برای استفاده از این متد بصورت زیر عنل می كنیم:

...



...

دقت كنید كه در زمان استفاده از متدهای قبل، اگر در متد سازنده برنامه از این متدها استفاده می كنید نیازی به ذكر نام فریم مورد استفاده نمی باشد . ولی اگر در بیرون از متد سازنده برنامه « مثلا در متد main» قصد استفاده از این متدها را دارید، باید بصورت زیر عمل نمایید:

...



...

******************************
4. تعیین محل نمایش فریم در صفحه نمایش

به برنامه زیر دقت نمایید:

import javax.swing.JFrame;

public class CreatingAWindow {
public static void main(String[] args) {
JFrame aWindow = new JFrame("This is the Window Title");
int windowWidth = 400; // Window width in pixels
int windowHeight = 150; // Window height in pixels
aWindow.setBounds(50, 100, windowWidth, windowHeight);
aWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CL OSE);
aWindow.setVisible(true);
}
}

برای تعیین محل نمایش یك فریم در جاوا، می توان از متد setBound استفاده نمود. این متد دارای چهر آرگومان ورودی می باشد. دو آرگومان اول مختصات نقطه ای از صفحه نمایش است كه می خواهید فریم در آنجا نمایش داده شود. دو آرگومان بعد نیز، اندازه فریم مورد نظر می باشد.

public class Frame extends JFrame{ JFrame frame = new JFrame(); setSize(200,200); pack(); frame.pack();

*AM@NDA*
16th May 2010, 10:57 PM
چگونه فریم خود را در وسط صفحه نمایش قرار دهیم؟

هدف از این مقاله آن است تا تنظیمات مورد نیاز جهت قرار دادن یك فریم در وسط صفحه نمایش را در حالات مختلف صفحه نمایش یعنی در رزولیشن های مختلف « Resolation » مورد بحث قرار دهیم. center screen

بطور پیش فرض JFrame خود را در گوشه بالا - سمت چپ صفحه نمایش قرار می دهد، ولی در اغلب موارد نیاز است تا فریم در وسط صفحه نمایش قرار گیرد.

روش اول:

نكته كلیدی در این مساله آن است كه ابتدا سعی كنیم تا نقطه وسط صفحه نمایش را در حالت جاری « از لحاظ رزولیشن » بدست آوریم. برای انجام این كار از متد getCenterPoint‌ استفاده می كنیم. این متد با استفاده از مختصات محیط كاری جاری در صفحه نمایش، نقطه وسط محیط را به عنوان خروجی باز می گرداند. این متد یك خروجی از نوع شی Point كه حاوی مختصات طول و عرض نقطه وسط محیط كاری است را باز می گرداند. برای استفاده از این متد، عبارت زیر را در برنامه خود استفاده نمایید:



نكته دیگر آن است كه این متد جز كتابخانه java.awt.GraphicsEnvironment می باشد كه در ابتدای برنامه باید import گردد.

حال كه توانستیم نقطه وسط صفحه نمایش را بدست آوریم، با یك محاسبه ساده می توانیم فریم خود را در وسط محیط كاری قرار دهیم. برای انجام این كار باید نقطه گوشه بالا-سمت چپ را بدست آوریم. می دانید كه این نقطه محل شروع رسم فریم ما توسط جاوا می باشد. تابع setBounds تابعی است كه چهار آرگومان ورودی دارد. دو تای اول، مختصات نقطه گوشه بالا-سمت چپ را مشخص می كند و دو آرگومان بعد، ابعاد فریم را تعیین می كند. به عبارت زیر توجه كنید‌:

aWindow.setBounds( center.x - windowWidth / 2 , center.y - windowHeight /2 , windowWidth,windowHeight);

همانطور كه می بینید قسمت پر رنگ در عبارت فوق، محاسبه مورد نیاز برای یافتن نقطه گوشه بالا-سمت چپ « محل شروع ترسیم فریم توسط جاوا »، می‌باشد.

برای درك بهتر مطالب فوق، در ادامه یك برنامه ساده آورده شده است كه با اجرا آن می توانید نكات فوق را براحتی درك نمایید.

import java.awt.GraphicsEnvironment;
import java.awt.Point;
import javax.swing.JFrame;

public class CenteringaWindow {
public static void main(String[] args) {
JFrame aWindow = new JFrame("This is the Window Title");
Point center = GraphicsEnvironment.getLocalGraphicsEnvironment(). getCenterPoint();
int windowWidth = 400;
int windowHeight = 150;
// set position and size
aWindow.setBounds(center.x - windowWidth / 2, center.y - windowHeight / 2, windowWidth,
windowHeight);
aWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CL OSE);
aWindow.setVisible(true); // Display the window
}
}

«نكته» در بعضی شرایط ممكن است حالتی پیش آید كه محاسبه فوق خیلی دقیق نباشد. راه حلی كه در چنین شرایطی پیشنهاد می شود آن است كه ابتدا با كمك متد getMaximumWindowBounds ابعاد محیط كاری كه در حال حاضر به عنوان محیط كاری مجاز در اختیار برنامه ما قرار دارد را بدست آوریم. خروجی این متد شی ای از نوع Rectangle یا چهار ضلعی می باشد كه به كمك آن می توان بصورت دقیق تری نقطه وسط محیط كاری را محاسبه نمود.

GraphicsEnvironment.getLocalGraphicsEnvironment(). getMaximumWindowBounds();

روش دوم

در این روش نیز اصول كار مانند روش قبل می باشد، اما از متد متفاوتی استفاده شده است. متد مورد استفاده برای انجام این كار، متد getToolKit می‌باشد. این متد كه یكی از متد های كلاس ToolKit واقع در بسته java.awt است، می تواند با سیستم عامل ارتباط برقرار كرده و طی یك پرس و جو اندازه صفحه نمایش را بدست آورد. در ادامه برنامه‌ای آورده شده است كه در آن نحوه كار با این متد و در نتیجه قرار دادن فریم در وسط صفحه نمایش ذكر شده است.

import java.awt.Dimension;
import java.awt.Toolkit;
import javax.swing.JFrame;

public class SizingWindowswithToolkit {
public static void main(String[] args) {
JFrame aWindow = new JFrame("This is the Window Title");
Toolkit theKit = aWindow.getToolkit();
Dimension wndSize = theKit.getScreenSize();
aWindow.setBounds(wndSize.width / 4, wndSize.height / 4, // Position
wndSize.width / 2, wndSize.height / 2); // Size
aWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CL OSE);
aWindow.setVisible(true);
}
}
Point center = GraphicsEnvironment.getLocalGraphicsEnvironment(). getCenterPoint();

*AM@NDA*
16th May 2010, 10:58 PM
چگونه آیكون JFrame‌ را تغییر دهیم؟


از نكات موثر در زمان طراحی و پیاده سازی یك برنامه كاربردی در جاوا و سایر زبان های برنامه نویسی، ایجاد واسط های گرافیكی كاربر پسند یا User freindly می باشد. برای طراحی چنین واسط یا به عبارت ساده تر، فرم ها یا فریم هایی بكارگیری نكات مختلفی ضروری می باشد. یكی از این موراد مهم استفاده از فایل های تصویری كوچك یا همان آیكون ها در برنامه و در فریم های مختلف آن می باشد. یعنی با توجه به محتویات یك فرم، می توان آیكونی متناسب با آن به فرم مورد نظر اضافه كرد. مزیت انجام چنین كاری آن است كه كاربر با توجه به تصویر فوق و بدون مطالعه محتویات آن می تواند بطور حدودی از وظایفی كه بر عهده فرم فوق می باشد، آگاه گردد.

JFrame Icon

بطور پیش فرض در برنامه هایی كه برای آنها آیكونی تعیین نشده باشد، آیكون معروف جاوا كه همان فنجان قهوه باشد، به عنوان آیكون فریم مورد استفاده قرار می گیرد. اما اگر كسی بخواهد آیكون دیگر را بجای این آیكون قرار دهد می تواند یكی از دو روش زیر را پیاده سازی نماید. البته توجه نمایید كه در هر دو روش زیر، باید در نهایت از متد setIconImage استفاده نمایید. آرگومان ورودی این متد یك فایل تصویری می باشد «همان فایل آیكون» كه با فراخوانی این متد توسط فریم مورد نظر بجای آیكون فریم قرار می گیرد.



دو روشی كه در ادامه مورد بحث قرار می گیرد در واقع روشهای فراخوانی و ارسال فایل تصویری مورد نظر به متد فوق را مورد بررسی قرار می دهد.

******************************

1. استفاده از یك فایل تصویری با فرمت GIF یا PNG

فرمت های مورد استفاده برای آیكون در جاوا معمولا دو فرمت معروف gif و png می باشند. در این روش فایل آیكون ما از قبل آماده می باشد و فقط كافیست كه ما آن را در برنامه خود فراخوانی كنیم. برای انجام چنین كاری می توان یكی از دو تكنیك زیر را مورد استفاده قرار دهید.

روش اول:

اگر از محیط NetBeans‌ برای اجرای برنامه زیر استفاده می كنید، باید فایل آیكون مورد نظر را در پوشه classes‌ و در كنار فایل MainClass10.class‌ قرار دهید.


import java.awt.Image;
import java.awt.Toolkit;
import javax.swing.JFrame;

public class MainClass10 {
public static void main(String[] args) {
JFrame f = new JFrame("FrameIcon");
Image im = Toolkit.getDefaultToolkit().getImage("middle.gif");
f.setIconImage(im);
f.setSize(100, 100);
f.setLocation(200, 200);
f.setVisible(true);
}

}

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

JFrame Icon


روش دوم:

اگر از محیط NetBeans‌ برای اجرای برنامه زیر استفاده می كنید، باید فایل آیكون مورد نظر را در پوشه اصلی پروژه یعنی در كنار پوشه های src و build و... قرار دهید. خروجی این روش نیز مانند تصویر قبل می باشد.



import java.awt.*;
import javax.swing.*;

public class FrameDemo3 {
public FrameDemo3(){
JFrame frame = new JFrame("FrameDemo4");
frame.setIconImage(getFDImage());
frame.setSize(200,180);
frame.setVisible(true);
}

protected static Image getFDImage() {
java.net.URL imgURL = FrameDemo2.class.getResource("middle.gif");
if (imgURL != null) {
return new ImageIcon(imgURL).getImage();
} else {
return null;
}
}

public static void main(String[] args) {
new FrameDemo3();
}
}


******************************

2. ایجاد یك آیكون در برنامه با كمك تكنینك بافرینگ

تفاوت این روش با دو روش قبل در آن است كه ما به كمك برنامه نویسی و با استفاده از تكنیك بافرینگ اقدام به ایجاد یك آیكون می نماییم و از فایل تصویری خاصی كمك نمی گیریم. در برنامه زیر به كمك توابع گرافیكی جاوا، یك آیكون ساده كه شامل یك مربع آبر رنگ و یك بیضی زرد رنگ در وسط آن است، ایجاد می كنیم. به كد زیر خوب توجه كنید:

import java.awt.*;
import javax.swing.*;
import java.awt.image.BufferedImage;

public class FrameDemo4 {
public FrameDemo4(){
JFrame frame = new JFrame("FrameDemo4");
frame.setIconImage(createFDImage());
frame.setSize(200,180);
frame.setVisible(true);
}
protected static Image createFDImage() {
//Create a 16x16 pixel image.
BufferedImage bi = new BufferedImage(16, 16, BufferedImage.TYPE_INT_RGB);
//Draw into it.
Graphics g = bi.getGraphics();
g.setColor(Color.BLUE);
g.fillRect(0, 0, 15, 15);
g.setColor(Color.YELLOW);
g.fillOval(5, 5, 5, 5);

g.dispose();
return bi;
}

public static void main(String[] args) {
new FrameDemo4();
}
}
frame.setIconImage(image);

*AM@NDA*
16th May 2010, 11:00 PM
چگونه ظاهر یك JFrame‌ را از لحاظ گرافیكی تغییر دهیم؟


بطور پیش فرض، دكوراسیون یا ظاهر یك پنجره در جاوا مانند پنجره ها یا فرم های معمول سیستم عامل محل اجرای برنامه جاوا می باشد.
این برنامه نشان می دهد كه اگر یك برنامه جاوا را در سیستم عامل های مختلفی اجرا كنیم، شكل پنجره ها یا فریم ها با توجه به پنجره های پیش فرض در آن سیستم عامل تغییر خواهد كرد. البته ما قادر هستیم با تنظیم خاصیت Look And Feel در یك سیستم عامل، فریم را شبیه حالتی كه در سیستم عامل‌های دیگر می شود، در آوریم.

«نكته» این مقاله قصد توضیح تكنیك Look And Feel‌ را ندارد و فقط برای ایجاد یك پیش زمینه در خواننده، مقدمه ای كوچك از آن بیان گردید.

حال از بعد دیگری تغییر دكوراسیون در فریم های جاوا را بررسی می كنیم.

«1» در این قسمت سعی داریم تا فریمی ایجاد كنیم كه به عنوان نمونه دكمه‌های MIN ،MAX و Close آن از لحاظ گرافیكی تغییر كند و یا اصلا فریم مورد نظر هیچ گونه حالت گرافیكی نداشته باشد و ...
كد این برنامه بصورت زیر می باشد:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class FrameDemo2a {
public FrameDemo2a() {
JFrame frame = new JFrame("FrameDemo2");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOS E);
JButton button=new JButton("A Button");
frame.getContentPane().add(button, BorderLayout.SOUTH);
frame.setSize(200,180);
frame.setVisible(true);
}
public static void main(String[] args) {
new FrameDemo2a();
}
}

»» برای تغییر ظاهر فریم به صورتی كه شبیه تصویر سمت چپ شود، نیاز است تا عبارت زیر به كد برنامه اضافه شود.


JFrame.setDefaultLookAndFeelDecorated(true);
JFrame frame = new JFrame("FrameDemo2");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOS E);
JButton button=new JButton("A Button");
frame.getContentPane().add(button, BorderLayout.SOUTH);
frame.setSize(200,180);
frame.setVisible(true);
}

»» برای تغییر ظاهر فریم، نیاز است تا عبارت زیر به كد برنامه اضافه شود.


JFrame frame = new JFrame("FrameDemo2");
frame.setUndecorated(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOS E);
JButton button=new JButton("A Button");
frame.getContentPane().add(button, BorderLayout.SOUTH);
frame.setSize(200,180);
frame.setVisible(true);
}

«2» گام بعدی در تنظیمات فریم ها، جلوگیری از تغییر اندازه پنجره ها می باشد. در اكثر موارد اجزا درون فرم به گونه ای می باشند كه نیاز به تغییر اندازه فرم نبوده و همیشه از لحاظ ابعاد ثابت می باشند. در چنین حالتی بهتر است امكان تغییر اندازه فریم را غیر فعال نماییم. برای انجام این كار عبارت زیر را به كد برنامه اضافه می نماییم.

JFrame frame = new JFrame( "Not resizable" );

frame.setResizable( false ); public FrameDemo2a() { public FrameDemo2a() { «3» سومین مرحله در تنظیمات ظاهر یك فریم در جاوا، انتخاب نوع قاب پنجره می باشد.

file:///C:/Documents%20and%20Settings/3/Desktop/New%20Folder/%DA%86%DA%AF%D9%88%D9%86%D9%87-%D8%B8%D8%A7%D9%87%D8%B1-%DB%8C%D9%83-JFrame-%D8%B1%D8%A7-%D8%A7%D8%B2-%D9%84%D8%AD%D8%A7%D8%B8-%DA%AF%D8%B1%D8%A7%D9%81%DB%8C%D9%83%DB%8C-%D8%AA%D8%BA%DB%8C%DB%8C%D8%B1%D8%AF%D9%87%DB%8C%D 8%AF-_files/decor8.htm
تصاویر فوق نشان دهنده قابهای استاندارد جاوا می باشد كه یك برنامه نویس می تواند بر اساس نیاز خود یكی از آنها را انتخاب نماید. برای انتخاب هر یك از قاب های فوق باید عبارت زیر را به برنامه اضافه نمایید:

JFrame frame = new JFrame("FrameDemo2");
frame.setUndecorated(true);
frame.getRootPane().setWindowDecorationStyle(JRoot Pane.ERROR_DIALOG);

برای انتخاب هریك از قاب های فوق، بجای قسمت قرمز رنگ در عبارت بالا كافیست عبارت داخل قاب مورد نظر خود را قرار دهید

*AM@NDA*
16th May 2010, 11:01 PM
بررسی چند برنامه كاربردی در زمینه JFrame


در این بخش چند مثال كاربردی در مورد فریم ها در جاوا قرار داده شده است. با مطالعه برنامه های زیر نكات مفیدی در زمینه برنامه نویسی با فریم ها بدست خواهید‌ آورد.

******************************
1. اضافه كردن JMenuBar‌ به JFrame



import java.awt.event.KeyEvent;
import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;JFrame and JMenuBar
import javax.swing.JRadioButtonMenuItem;

public class MainClass11 {
public static void main(String args[]) {
JFrame f = new JFrame("JRadioButtonMenuItem Sample");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JMenuBar bar = new JMenuBar();
JMenu menu = new JMenu("Options");
menu.setMnemonic(KeyEvent.VK_O);
ButtonGroup group = new ButtonGroup();

JRadioButtonMenuItem menuItem = new JRadioButtonMenuItem("A");
group.add(menuItem);
menu.add(menuItem);

menuItem = new JRadioButtonMenuItem("B");
group.add(menuItem);
menu.add(menuItem);

menuItem = new JRadioButtonMenuItem("C");
group.add(menuItem);
menu.add(menuItem);

bar.add(menu);
f.setJMenuBar(bar);
f.setSize(300, 200);
f.setVisible(true);
}
}

******************************
2. تعیین نوع Cursor ماوس و رنگ زمینه فریم



import java.awt.Color;JFrame cursor and Background color
import java.awt.Cursor;
import java.awt.Toolkit;
import javax.swing.JFrame;

public class MainClass4 {
public static void main(String[] args) {
JFrame aWindow = new JFrame();
aWindow.setBounds(200, 200, 200, 200);
aWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CL OSE);
aWindow.setCursor(Cursor.getPredefinedCursor(Curso r.CROSSHAIR_CURSOR));
aWindow.getContentPane().setBackground(Color.PINK) ;
aWindow.setVisible(true);
}
}

******************************
3. شبكه بندی فریم «GridLayout»

import java.awt.GridLayout;
import javax.swing.JButton;JFrame GridLayout
import javax.swing.JFrame;

public class MainClass9 {
public static void main(String args[]) {
JFrame frame = new JFrame("GridLayout Sample");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOS E);
frame.setLayout(new GridLayout(3, 3));
for (int i = 9; i > 0; i--) {
JButton button = new JButton(Integer.toString(i));
frame.add(button, 0);
}
frame.setSize(300, 200);
frame.setVisible(true);
}
}


******************************
4. تغییر ظاهر دادن فریم یا Decorate

import javax.swing.JFrame;
import javax.swing.JRootPane;

public class MainClass13 {
public static void main(final String args[]) {
JFrame frame = new JFrame("Adornment Example");JFrame and set Decorate Style
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOS E);
frame.setUndecorated(true);
frame.getRootPane().setWindowDecorationStyle(JRoot Pane.FRAME);
frame.setSize(300, 100);
frame.setVisible(true);
}
}

استفاده از تمامی مطالب سایت تنها با ذکر منبع آن به نام سایت علمی نخبگان جوان و ذکر آدرس سایت مجاز است

استفاده از نام و برند نخبگان جوان به هر نحو توسط سایر سایت ها ممنوع بوده و پیگرد قانونی دارد