بسته های Swing و AWT برای ساخت رابط گرافیکی در جاوا استفاده می شوند، در این جلسه با ویژگی های این بسته ها  آشنا می شوید.

Swing چیست ؟

Swing قسمتی از JFC می باشد بسته Swing شامل یک مجموعه از کامپوننت ها است که بـرای ایجـاد GUI ها و اضافه کردن قابلیت محاوره ای به برنامه های کاربردی جاوا مورد استفاده قرار می گیرد.

Swing  سرنام یا مخفف عبارت خاصی نمی باشد. پروژه  Swing در اواخر سال ۱۹۹۶ شـروع و در سال ۱۹۹۸ نسخه اول آن عرضه گردید. نسخه ۱٫۰ این بسته شامل حدودا ۲۵۰ کلاس و ۸۰ واسط می باشد. Swing 1.0   برای اجرا شدن به ۵٫۱٫۱ JDK نیاز داشت.

Swing  شامل ۱۸ بسته (package) اصلی  می باشد که دو بسته زیر از آن بیشترین استفاده را دارند:

javax.swing

javax.swing.event

AWT چیست ؟

AWT نیز مانند Swing برای توسعه GUI ها مورد استفاده قرار می گیرد. حال سـوال اینجاسـت که چرا با وجود AWT به Swing نیاز می باشد؟ آیا Swing جایگزینی برای AWT می باشد؟

برای پاسخ به سئوالات فوق باید به نکات زیر دقت نمایید:

  • در زمان توسعه اولین نسخه جاوا، AWT نیز به همراه آن به عنوان ابـزار طراحـی GUI هـای مورد نیاز برنامه نویسان ارائه گردید. ( اولـین نسـخه Swing در سـال ۱۹۹۸ ارائـه گردیـد ) پـس ابزارهای بیشتری از آن پشتیبانی می کنند. مثلا Applet هایی که با Awt نوشته مـی شـوند در مرورگرهای بیشتری اجرا میشوند.
  • کامپوننــت هــای AWT اصــطلاحا (سنگین وزن )HeavyWeight و کامپوننــت هــای Swing اصــطلاحا (شبک وزن) LightWeight نامیده مـی شـوند . تفـاوت دو مـورد فـوق در ایـن اسـت کـه کامپوننـت هـای HeavyWeight از Peer Component ها استفاده می کنند و در واقع به آنها وابسته انـد . در صورتیکه کامپوننت های LightWeight به صورت مستقل از Component Peer ها عمل می کنند.
    منظور از Component Peer ها در حقیقت کامپوننت های معـادل کامپوننـت هـای جـاوا در سیستم عامل مورد نظر ( میزبان ) می باشد. می دانیم که سیستم عامل ها نیز برای نمایش واسـط های گرافیکی خود از یکسری کامپوننت و متد های ویژه و خاص خود استفاده می کنند. همچنـین می دانیم که بعضی از زبانهای برنامه نویسی قادر به استفاده از این اجزا می باشند. حال نکته مهم و اساسی در این بین آن است که برنامه هایی که از این کامپوننت ها و متدها استفاده مـی کننـد در واقع به محیط فوق وابسته شده و قابلیت انتقال خود را از دست می دهند.
  • عمده دلیل تفاوت بین AWT و Swing وجود مشکل فوق در AWT مـی باشـد . در نتیجـه AWT و واسط های تولیدی با آن در واقع از Native GUI Toolkit محیط ها (سیستم عامل های میزبان) خود استفاده می کنند. این امر سبب آن می شود که وقتی واسط کاربری طراحی شده در یک سیستم عامل را در سیستم عامل دیگری اجرا کنیم ممکن است با چیـزی کـه مـا در ابتـدا طراحی کرده ایم متفاوت باشد.
  • کامپوننت های Swing کندتر از AWT بارگذاری می شوند. در عوض Swing از مدل کنترل رویداد موثرتری نسبت به AWT استفاده می کند. در نتیجـه کامپوننـت هـای Swing سریعتر از کامپوننت های مشابه در AWT اجرا می شوند. یعنی سریعتر به رویدادها واکـنش نشـان می دهند.

برخی از ویژگیهای  Swing

  • نام کامپوننت های Swing با حرف J شـروع مـی شـوند . ماننـد JtabbedPane و Jtable
  • کامپوننت های Swing دارای خاصیت Tooltips می باشند.
  • بسته Swing قابل حمل تر از AWT  می باشد
  • کامپوننت های Swing از قابلیـت Redo/Undo پشـتیبانی مـی کننـد . مـثلا بـه کمـک خاصیت Undo یک عنصر حذف شده از Jtable را می توان باز گرداند و یا یک متن تغییر یافته را در JtextField به حالت قبل بازگرداند
  • بسته Swing  شامل کامپوننت های جدید و مفیدی مانند , JprogressBar , Jtree JInternalFrame , Jtable و … می باشد.
  • پشتیبانی از خاصیت Look and Feel  یا به اختصار L&F یا LnF توسط Swing که یکی از ویژگی های بسیار مهم در طراحی واسط توسط Swing می باشـد . توسـط ایـن قابلیـت، برنامه ها در یک محیط جدید (سیستم عامل دیگر ) بدون نیاز به کامپایل مجـدد  (Run Time) کامپوننت های خود را تنظیم می کنند.
    این تنظیمات میتواند به یکی از دو شکل  زیر باشد:

    1. به گونه ای عمل کنیم تا واسط طراحی شده در تمامی سیستم عامـل هـا بـه یـک صـورت نمایش داده شوند.(بدون تغییر در ظاهر اجزا)
    2. به گونه ای عمل کنیم تا کامپوننت های واسط طراحی شده در هـر سیسـتم عامـل مشـابه کامپوننت های سیستم عامل مورد نظر تغییر شکل دهند.

شکل زیر کامپوننت های موجود در پکیج Swing   نشان می دهد:

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