کتابخانه ی Swing جاوا یکی از قدرتمندترین ابزارهای ایجاد واسط گرافیکی (GUI) برای برنامه های شماست، این ابزار قدرتمند به شما این امکان را میدهد تا براحتی رابط گرافیکی مناسب و دلخواه برای برنامه های خود بسازید.

ایجاد یک محیط گرافیکی با استفاده از این کتابخانه ، تفاوت چندانی با نوشتن یک برنامه ی ساده در جاوا ندارد، شما براحتی می توانید با استفاده از کلاس های موجود در کتابخانه ی Swing پنجره ای شبیه آنچه هرروز در ویندوز می بینید بسازید.



ایجاد یک فریم خالی:

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

روش اول: در این روش مستقیما از کلاس JFrame (یکی از کلاس های موجود در کتابخانه Swing)، شئ ساخته و تمام کارهای خود را روی آن انجام می دهیم.

```

JFrame myFrame = new JFrame();

	حال بایستی اندازه ی فریمی که ساخته ایم را مشخص کنیم ، برای این کار از متود setSize کلاس JFrame استفاده می کنیم.<br />
	```

int frameWidth  = 400;
int frameHeight = 400;
myFrame.setSize( frameWidth , frameHeight );

در جاوا بطور پیش فرض هیچ عملی (Action) برای دکمه ی خروج کناری پنجره ها در نظر نمی گیرد، پس ما بایستی خود، عمل خروج را برای این دکمه تعریف بکنیم. برای این منظور ما ساده ترین راه را پیش میگیریم. با افزودن خط زیر به برنامه ی خود ،با فشرده شدن دکمه ی خروج بالای فریم برنامه ی شما نیز خاتمه می یابد.<br />
```

myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

	با استفاده از متود setTitle می توانید عنوان فریم پنجره ی خود را تغییر دهید.<br />
	```

myFrame.setTitle( "Swing Tutorial" );

برای مشاهده ی این فریم باید آن را فعال کنیم ، برای این منظور از متود SetVisible استفاده کرده و آرگومان آن را مقدار true قرار می دهیم.<br />
```

myFrame.setVisible( true );

	کد ما در نهایت کلاسی به این شکل خواهیم داشت:<br />
	<br />
	```

public class TestFrame{
	public static void main(String args[]){
		JFrame myFrame = new JFrame();
		int frameWidth  = 400;
		int frameHeight = 400;
		myFrame.setSize( frameWidth , frameHeight );
		myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		myFrame.setTitle( "Swing Tutorial" );
		myFrame.setVisible( true );
	}
}

با این کار ما یک فریم خالی با اندازه ی ۴۰۰&times;۴۰۰ ایجاد کرده ایم که می تواند متن ، تصویر یا دیگر اطلاعات ما را در خود بگنجاند، برای قرار دادن دکمه ها و&hellip; کافیست کد های مربوط را قبل از فعال کردن فریم بنویسیم.<br />
روش دوم:در این روش کلاسی طراحی خواهیم کرد که از JFrame ارث بری داشته باشد و سپس کلیه ی عملیات خود را در این کلاس انجام می دهیم و در نهایت در متود main از این کلاس شئ میسازیم.<br />
در حقیقت این کلاس همان JFrame است که ما آن را بطور دلخواه شخصی سازی کرده ایم.<br />
```

public class MyFrame extends JFrame{
public MyFrame(){
this.setSize( 400 , 400 );
this.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
this.setTitle( "Swing Tutorial" );
this.setVisible( true );
}
public static void main(String[] args){
new MyFrame();
}
}

	روش دوم راه مناسب تری برای ایجاد گرافیک در جاوا است ، هرچند استفاده از روش اول نیز کاملا صحیح می باشد.<br />
	<br />
	کنترل گرها:(Layout Managers)<br />
	کلاس هایی هستند که وظیفه ی کنترل موقیت، اندازه و هم ترازی و جلو گیری از برهم کنش و روی هم افتادن اجزا را برعهده دارند. جاوا کنترل گرها را از انواع ساده ای همچون FlowLayout , BoxLayout و GridLayout و انواع ویژه که کاربرد خاصی دارند همچون BorderLayout و CardLayout تا کنترل کننده های قابل انعطافی همچون GridBagLayout را برای تنظیم اجزا فراهم می کند.<br />
	FlowLayout<br />
	برای تنطیم مولفه ها در ردیف های افقی مورد استفاده قرار می گیرد، با استفاده از FlowLayout مولفه ها بصورت خودکار در یک ردیف قرار می گیرد و در صورت نیاز ده ردیف های بعدی منتقل می شوند<br />
	```

setLayout(new FlowLayout());

GridLayout<br />
برای تنطیم مولفه ها در ردیف و ستون های هم اندازه و منظم مورد استفاده قرار می گیرد.<br />
```

setLayout(new GridLayout(rows, cols, x-spacing, y-spacing));

	BorderLayout<br />
	مولفه ها را حداکثر در پنج ناحیه : شمال، جنوب ،شرق ،غرب و مرکز تراز می کند.<br />
	```

setLayout(new BorderLayout());
add( Component , BorderLayout.CENTER);

<br />
مولفه ها:(Components)<br />
کتابخانه Swing شامل کلاس هایی است که تمام نیازهای شما را برای ایجاد محیط دلخواه خودتان رفع میکند،اینها مولفه های اصلی فریم ها ی شما می باشند.<br />
javax.swing.JLabel<br />
فضایی برای نمایش متن های کوچک ، عکس یا هر دو ایجاد میکند، از Label فقط برای نمایش اطلاعات استفاده می شود و نمی توان از طریق آنها از کاربر ورودی گرفت.<br />
شما می توانید نحوه ی نمایش متن و تصویر با استفاده تراز بندی افقی(Horizontal Alignment) و عمودی(Vertical Alignment) تنظیم کنید، همچنین شما می توانید با استفاده از متود setIconTextDap فاصله ی بین تصویر و متن رو بر حسب پیکسل تعیین کنید.(این فاصله بطور پیش فرض ۴ پیکسل می باشد)<br />
```

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

public class JLabelDemo extends JFrame {
public JLabelDemo() {
JLabel Label1 = new JLabel("A Simple Label");
JLabel Label2 = new JLabel("A Label with LEFT alignment", JLabel.LEFT);
JLabel Label3 = new JLabel("A Label with CENTER alignment",
JLabel.CENTER);
JLabel Label4 = new JLabel("A Label with RIGHT alignment", JLabel.RIGHT);
JLabel Label5 = new JLabel("A Label with LEADING alignment",
JLabel.LEADING);
JLabel Label6 = new JLabel("A Label with TRAILING alignment",
JLabel.TRAILING);
JLabel Label7 = new JLabel();

	this.setLayout(new GridLayout(7, 1));
	this.add(Label1);
	this.add(Label2);
	this.add(Label3);
	this.add(Label4);
	this.add(Label5);
	this.add(Label6);
	this.add(Label7);

	this.setBackground(Color.yellow);
	Label7.setHorizontalAlignment(JLabel.CENTER);
	Label7.setForeground(Color.blue);
	Label7.setText("Text added with setText");
	
	this.setSize(400, 400);
	this.setVisible(true);
}

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

}

<div style="text-align:center">
<img src="/files/swing - JLabelDemo.png" alt="JLabelDemo" />
</div>
	<br />
	javax.swing.JButton<br />
	&lrm; دکمه ها همانطوری که شما تصور می کنید، مولفه هایی هستند که کابر می تواند با فشار دادن آنها جزئیات برنامه را تغییر دهد، دکمه ها می توانند هم متن و هم تصویر را نمایش دهند.<br />
	```

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

public class JButtonDemo {

	public static void main(String[] a) {
		JFrame f = new JFrame("JButton Demo");
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		JButton b = new JButton("This is a JButton");
		f.getContentPane().add(b);
		f.setSize(200,100);      
		f.setVisible(true);
        }
}

JButtonDemo
javax.swing.JCheckBox
چک باکس مولفه ای است که دو حالت انتخاب شده و نشده دارد.
چک باکس کنترل گری است که به شما این امکان را میدهد که بیش از یک ویژگی را در یک زمان انتخاب کنید.
```

import javax.swing.*;

public class JCheckboxDemo {
public static void main(String[] args){
JFrame frame = new JFrame("JCheck Box Demo");
JCheckBox chk = new JCheckBox("This is the JCheckBox");
frame.add(chk);
frame.setSize(200, 200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}

<div style="text-align:center">
<img src="/files/swing - JCheckboxDemo.png" alt="JCheckboxDemo" />
</div>
	javax.swing.JTextField<br />
	&lrm;فضایی برای نمایش و ویرایش متن های تک خطی ایجاد می کند.<br />
	```

import javax.swing.*;
 
public class TextFieldTest extends JFrame{
	public TextFieldTest(){
		JTextField tf = new JTextField();
		add(tf);
		tf.setText("This ia a TextField");
		setSize(200, 200);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setVisible(true);
	}
	public static void main(String[] args) {
		new TextFieldTest();
	}
}

JTextFieldDemo
javax.swing.JTextArea
‎فضایی برای نمایش و ویرایش متن های چند خطی ایجاد می کند، شما می توانید با استفاده از متود های مختلف موجود در این کلاس متن را از کابر دریافت ، ویرایش کرده و نمایش دهید.
```

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

public class TextAreaTest extends JFrame{
public TextAreaTest(){
JTextArea ta = new JTextArea("First text");
ta.append("Appended text");
ta.setForeground(Color.green);
add(ta);
setSize(200, 200);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String[] args) {
new TextAreaTest();
}
}

<div style="text-align:center">
<img src="/files/swing - TextAreaTest.png" alt="JTextAreaDemo" />
</div>