During learn and experience

مقایسه بین Swing و SWT

مقایسه بین Swing و SWT

حتما شما هم در مورد ابزارهای مشهور تولید رابط کاربری در جاوا (Swing ، SWT) شنیده اید در این مقاله بصورت کلی به مقایسه ای بین این دو ابزار و موارد کاربرد آنها می پردازیم.

Swing نسل دوم ابزار تولید رابط کاربری در JDK استاندارد است که توسط شرکت Sun Microsystems منتشر می شود . Swing برروی AWT (نسل اول ابزار تولید رابط کاربری ارائه شده توسط شرکت Sun Microsystems) بنا شده و هدف از توسعه آن تولید رابط کاربری پیچیده تر و سفارشی با ظاهر یکسان در پلتفرمها های مختلف می باشد .

SWT ابزار تولید رابط کاربری است که در ابتدا توسط شرکت IBM توسعه داده شد و هم اکنون توسط بنیاد Eclipse نگهداری و پشتیبانی می شود و هدف از توسه آن تولید ابزاری برای دسترسی به کدهای بومی کامپوننت های پلتفرم های مختلف است همچنین تولید رابط کاربری با کارایی (Performance) بالا و یکپارچگی عمیق با پلتفرم از دیگر اهداف توسعه این ابزار می باشد.

همانطور که مشاهده می کنید اهداف توسعه این دو ابزار کاملا متفاوت بوده و بسیاری از کارشناسان اعتقاد دارند این دو ابزار برای اهداف مختلف توسعه داده شده اند.

تفاوت های Swing و SWT

  • Swing برای نمایش کامپوننت های خود از کتابخانه های بومی سیستم عامل استفاده نمی کند و با استفاده از کتابخانه Java 2D آنها را رسم می کند ولی SWT کدهای بومی کتابخانه های GUI( مانند اشیاء GTK+ و اشیاء Motif )را با استفاده از JNI(java native interface) بسته بندی می کند و برای نمایش کامپوننت های خود از آنها استفاده می کند و در زمانی که کدهای بومی احتیاجات SWT را براورده نمی کنند همانند Swing کامپوننت های مورد نظر خود را با جاوا پیاده سازی می کند .

  • برنامه های تولید شده با SWT ساده تر از Swing می باشد.

  • وقف دادن SWT با سیستم عامل های جدید مشکلتر و زمانبرتر از Swing است بدلیل اینکه AWT (زیرساخت کتابخانه Swing)وابستگی کم و بسیار ساده به سیستم عامل دارد (به نسبت SWT)
  • Swing براساس معماری MVC پیاده سازی شده است در حالی که SWT اینطور نیست.
  • SWT سریعتر از Swing اجرا می شود و همچنین منابع سیستمی کمتری مصرف می کند (البته بصورت علمی برتری کارایی SWT به Swing ثابت نشده است و برتری ناچیز SWT در محیط ها و کاربردهای مختلف متغییر و گاها برتری وجود ندارد).
  • ظاهر (look and feel) کامپوننت های SWT شبیه کامپوننت های سیستم عاملی است که درون آن اجرا می شود ولی Swing می تواند برروی هر سیستم عاملی شکل مورد نظر شما را داشته باشد.
  • در SWT از automatic garbage collection استفاده نمی شود و باید همانند زبان c با استفاده از تابع dispose() حافظه تخصیص داده شده برگردانده شود که این امر برنامه های تولید شده توسط SWT را مستعد خطا می کند ولی Swing از automatic garbage collection استفاده می کند.
  • پیاده سازی SWT برای هر پلتفرم متفاوت است و برای هر پلتفرم باید jar فایل مخصوص به آن پلتفرم استفاده شود در حالی که Swing مستقل از پلتفرم است.
  • Swing توسعه دهنده را با جزئیات کمتر سیستمی درگیر می کند در حالی که SWT بلعکس است.

منابع :
http://en.wikipedia.org/wiki/Standard_Widget_Toolkit
http://en.wikipedia.org/wiki/Swing_(Java)
http://en.wikipedia.org/wiki/Abstract_Windowing_Toolkit
۲۱ خرداد ۸۷ ، ۲۳:۲۱ ۰ نظر موافقین ۰ مخالفین ۰
سعید زرین فام

استفاده از فرمان applicationCreator (GWT)

تولید ساختار اولیه یک برنامه GWT با استفاده از فرمان applicationCreator:

با استفاده از فرمان applicationCreator شما می توانید ساختار اولیه یک برنامه GWT و اسکریپت های لازم برای اجرای برنامه در حالت hosted mode و کامپایل برنامه به جاوا اسکریپت را تولید کنید شما همچنین می توانید فایل های لازم برای کامپایل و اجرای پروژه را با استفاده از Eclipse IDE را نیز تولید کنید .

ساختار کلی این دستور بصورت زیر می باشد :

applicationCreator [-eclipse projectName] [-out dir] [-overwrite] [-ignore] …client.className

-eclipse

یک تنظیمات debug launch برای eclipse IDEتولید می کند .

-out

مشخص کننده دایرکتوری می باشد که می خواهیم فایلهای پرژه در آن ساخته شود (پیش فرض دایرکتوری جاری می باشد)

-overwrite

در صورتی که در دایرکتوری به فایل تکراری برخورد کند آنها را بازنویسی می کند

-ignore

در صورتی که در دایرکتوری به فایل تکراری برخورد کند آنها را بازنویسی نمی کند

className

نام پرو‍ه و همچنین نام artifact هایی که توسط applicationCreator بصورت خودکار تولید می شود.



مثال :

اگر دایرکتوری جاری ما Test باشد و دستور زیر را اجرامی کنیم :

applicationCreator com.saeed.client.TestApp
فایلها و دایرکتوری های زیر تولید می شود :

Created directory test\src

Created directory test\src\com\saeed

Created directory test\src\com\saeed\client

Created directory test\src\com\saeed\public

Created file test\src\com\saeed\TestApp.gwt.xml

Created file test\src\com\saeed\public\TestApp.html

Created file test\src\com\saeed\public\TestApp.css

Created file test\src\com\saeed\client\TestApp.java

Created file test\TestApp-shell

Created file test\TestApp-compile

همانطور که مشاهده می کنید بسته به نوع سیستم عامل شما دو قایل TestApp-shell و TestApp-compile تولید می شود که اولی برای اجرای برنامه در حالت hosted mode و دومی برای کامپایل کردن برنامه به Javascript است .

نکته : حتما باید package نهایی برای نام گذاری className برابر client باشد کوتاه ترین حالت می تواند client.className باشد .

نکته : اگر دستور زیر را اجرا کنیم :

applicationCreator -eclipse TestApp com.saeed.client.TestApp

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

Created file test\TestApp.launch

نکته : اگر می خواهید از دستورات GWT (مانند : applicationCreator )در تمامی دایرکتوری ها استفاده کنید مراحل زیر را انجام دهید .

راه حل ساده این است که دایرکتوری فرمان های GWT را بعنوان Path variable تعریف کنیم . برای این منظور در سیستم عامل ویندوز مراحل زیر را انجام دهید :

  • در قسمت Control Panel برروی System کلیک کنید .

  • در قسمت Advance برروی دکمه Environment Variables کلیک کنید .

  • در قسمت User Variables برروی متغییر PATH دوبار کلیک کنید .

  • متن C:\Program Files\GWT\gwt-windows-1.5.0 را به انتهای قسمت value اضافه کنید .


۱۴ خرداد ۸۷ ، ۱۱:۴۰ ۰ نظر موافقین ۰ مخالفین ۰
سعید زرین فام

معماری GWT(آموزشی قسمت 2)

معماری برنامه های تولید شده با استفاده از GWT
معماری کلی برنامه های تولید شده توسط GWT بر اساس معماری Client-Server می باشد . در سمت کلاینت کدهای AJAX (Javascript , HTML , CSS )قرار دارند و در سمت سرور منطق برنامه که براساس مفاهیم Java-servlet پیاده سازی شده اند قرار دارد .زمانی که در سمت کلاینت کاربر با استفاده از رابط کاربری AJAX درخواست اطلاعاتی را از سمت سرور می کند قسمت فراخوانی توابع از راه دور (Remote Procedure Call) برنامه بصورت غیر همزمان (Asynchron)و بدون اینکه صفحه مرورگر referesh شود توابع پیاده سازی شده در سمت سرور را فراخوانی کرده و اطلاعات مورد نظر را از سمت سرور آورده و به کاربر نمایش می دهند . یکی از مزایای اصلی GWT در این است که دو جزء اصلی معماری Client-Server با استفاده از یک زبان برنامه نویسی (Java) تولید می شوند که این امر باعث بالاتر رفتن سرعت توسعه و همچنین تمرکز بیشتر برروی مفاهیمی مانند کیفیت ، تحلیل و ... می شود .
اجزای اصلی GWT
GWT شامل 4 جزء اساسی است که که این 4 جزء با همکاری یکدیگر سبب شده اند چهارچوبی (Framework) قدرتمند برای توسعه برنامه با تکنیک AJAX در اختیار توسعه دهندگان قرار بگیرد .

1. کامپایلر (Java-to-Javascript) : ما از این کامپایلر برای ترجمه برنامه های GWT نوشته شده خود (با زبان برنامه نویسی جاوا) به کدهای Javascript استفاده می کنیم . برنامه AJAX تولید شده فقط شامل صفحات HTML و کدهای Javascript می باشد که می تواند برروی سرور وب قرار بگیرد .
2. Hosted Web Browser (Hosted mode): این قسمت از معماری GWT در زمان توسعه و تست نرم افزار بسیار مفید است . Hosted Web Browser به توسعه دهنده این امکان را می دهد بدون اینکه برنامه خود را به کدهای Javascript کامپایل کند برنامه خود را اجرا کنند و خروجی را مشاهده نماید (به این نوع اجرا اصطلاحا اجرای برنامه در حالت Hosted mode می گویند ) . GWT برای این منظور یک مرورگر توکار مخصوص به خود را دارد.
3. نسخه شبیه سازی شده کتابخانه های زمان اجرای جاوا (JRE emulation library ( : این جرء معماری شامل پیاده سازی Javascript اکثر کلاسهای مورد استفاده در پکیجهای java.lang و java.util نسخه استاندارد جاوا برای استفاده در سمت کلاینت می باشد . نکته مهم این است که توسعه دهندگان در برنامه نویسی سمت سرور هیچ محدودیتی در استفاده از کتابخانه های مختلف جاوا ندارند .
4. کتابخانه رابط کاربری تحت وب (Web UI class library ) : این قسمت شامل مجموعه ای کامل از اجزا رابط کاربری مورد استفاده در وب مانند : دکمه ، فرم و... می باشد (که اصطلاحا widget نامیده می شود)

۱۲ خرداد ۸۷ ، ۰۸:۴۷ ۰ نظر موافقین ۰ مخالفین ۰
سعید زرین فام

معرفی GWT(آموزشی قسمت 1)

معرفی GWT
تولید برنامه های تحت وب با تکنیک AJAX کاری بسیار دشوار است بدلیل اینکه هسته اصلی تکنیک AJAX بروی Javascript بنا شده است و برنامه نویسی با زبان Javascript کاری دشوار و بسیار مستعد خطا می باشد و همچنین بدلیل اینکه تکنیک AJAX از ترکیب جند تکنولوزی (HTML ، Javascript ، CSS و...) بوجود آمده است دارای گستردگی مطالب می باشد این ذلایل باعث شده اند تکنیک AJAX به ذات روش پیچیده ای برای تولید برنامه های تحت وب باشد .
GWT یک چارچوب توسعه نرم افزار متن باز براساس تکنولوژی جاوا است که به توسعه دهندگان اجازه می دهد به راحتی برنامه های تحت وب با تکنیک AJAX تولید کنند .
با استفاده از GWT شما به راحتی می توانید برنامه های AJAX با کارایی بالا را با استفاده از زبان برنامه نویسی جاوا تولید و عیب یابی کنید زمانی که برنامه شما با استفاده از زبان برنامه نویسی جاوا آماده شد کامپایلر GWT آن را به کدهای Javascript کامپایل می کند .
مزایای GWT
  • استفاده از ابزارها و محیطهای توسعه زبان برنامه نویسی جاوا که باعث کاهش زمان توسعه نرم افزار می شود .
  • تولید کدهای Javascript بهینه شده توسط کامپایلر GWT بدون درگیری و شناختی از برنامه نویسی با Javascript.
  • تولید نرم افزارهای تحت وب سازگار با تمامی مرورگرهای وب موجود در بازار (Firefox , IE , Safari , Opera , …)
  • استفاده از ابزارهای تست جاوا که باعث راحتی و تسریع در عملیات عیب یابی نرم افزار می شود .
  • در اختار قرار داشتن مجموعه وسیعی از اجزاء رابط گرافیکی کاربر و همچنین قابلیت توسعه و استفاده مجدد آنها .
  • مکانیزم ساده فراخوانی توابع از راه دور (Remote Procedure Call) برای برنامه های AJAX .
  • وجود Javascript Natice Interface (JSNI) که سبب می شود توسعه دهندگان بتوانند از کدهای Javascript موجود در کدهای GWT به راحتی استفاده کنند .
  • مدیریت تاریخچه (History) مرورگر که به برنامه های AJAX وضعیت خود را مدیریت کنند و نیز به کاربر اجازه استفاده از دکمه back مرورگر را می دهد .
  • امکان تولید نرم افزار با پشتیبانی از چند زبان (Internationalization)
  • امکان استفاده از برنامه های AJAX بصورت Offline (در حال توسعه )
تدریس دوره کاربردی برنامه نویسی Ajax با استفاده از Google Web Toolkit

شاد باشید.
۰۷ خرداد ۸۷ ، ۱۲:۵۲ ۰ نظر موافقین ۰ مخالفین ۰
سعید زرین فام

طراحی و تولید سایت با روش AJAX

سلام
شما می توانید با تماس با مسئول سایت (zarinfam.s@gmail.com) درخواست مشاوره و یا تولید یک وب سایت ویا یک نرم افزار را بدهید .
برای مشاهده برنامه نمونه بر روی لینک زیر کلیک کنید :
برنامه نمونه (Demo)

۰۶ خرداد ۸۷ ، ۱۷:۰۸ ۰ نظر موافقین ۰ مخالفین ۰
سعید زرین فام

پیشنهادات و انتقادات

سلام
شما می توانید پیشنهادات و انتقادات خود را برای بهبود سایت و بالا بردن کیفیت آن در قسمت نظرات کاربران این مطلب ثبت کنید .


۰۶ خرداد ۸۷ ، ۱۶:۴۹ ۱ نظر موافقین ۰ مخالفین ۰
سعید زرین فام

چالشی برای تفکر


شک لازمه ایمان است و حق مسلم هر فردی . شک باعث تفکر بیشتر در لایه های ایمان می شود . الزاما شک در مراحل اولیه ایمان نیست بلکه ممکن است بعد از گذشت سالیان و یا حتی زمانی که ایمان تقریبا به یقین تبدیل شده است بوجود بیاید که این شک یکی از بالاترین موهبت های الهی است که به
هر فردی داده نمی شود

شک ، من را به تحقیق وا می دارد
شک باعث محک زدن اعتقادات من می شود
شک این توانایی را به من می دهد که راه درست را از را غلط بشناسد
شک به من اجازه می شود در دایره بسته تفکرات محدودی باقی نمانم و با سایرتفکرات نیز آشنا شوم

شک اعتبار ایمان من است

پس من در دایره ای خود را محصور نمی کنم و اسم آن را ایمان نمیگذارم ، درستی تفکرات خود را به چالش می کشم تا در صورت درست بودن بر ایمانم افروده شود و در صورت نادرست بودن راه خود را اصلاح کنم



۲۳ ارديبهشت ۸۷ ، ۱۱:۰۷ ۴ نظر موافقین ۰ مخالفین ۰
سعید زرین فام

روشنگری

روشنگری یعنی به کارگیری قوه درک خود بدون سرپرستی دیگران
در به کارگیری عقل خود شجاعت داشته باش
تنبلی و بزدلی دلایل آن است که چرا چنین بخش بزرگی از بشریت تحت سرپرستی دیگران باقی می مانند و چرا برای دیگران چنین آسان است که خود را قیم آنها قرار دهند . خیلی آسان است که خودت فکر نکنی . اگر من کتابی داشته باشم که به جای من درک کند و کشیشی که بجای من وجدان داشته باشد و پزشکی که برنامه غذایی مرا تعیین کند و از این قبیل دیگر نیازی ندارم به خودم زحمت بدهم . نیازی به فکر کردن ندارم .اگر بتوانم تنها با پرداخت پول مشکل را حل کنم دیگران این کار خسته کننده را برای من انجام خواهند داد
برای روشنگری چیزی لازم نیست مگر آزادی ، آزادی است که استفاده از عقل را در هر مقطعی عمومی می سازد . اما از هر طرف می شنوم که بحث نکن . افسر ارتش می گوید : بحث نکن مشق کن ، مامور جمع آوری مالیات می گوید : بحث نکن بپرداز ، روحانی می گوید : بحث نکن ایمان بیاور ، تنها یک شاهزاده در این دنیا می گوید : هر قدر دلت می خواهد بحث کن اما اطاعت کن! .در همه جا برای آزادی محدودیت وجود دارد
استفاده عمومی از عقل خود باید همیشه آزاد باشد و تنها این است که روشنگری را به میان مردم می برد

امانوئل کانت فیلسوف شهیر آلمانی (در رساله روشنگری چیست ؟)
۰۸ فروردين ۸۷ ، ۱۰:۴۴ ۲ نظر موافقین ۰ مخالفین ۰
سعید زرین فام

How to install Netbeans IDE on linux ?

Hi
I had some problems for installing Netbeans IDE on linux . This link was very useful for me :

http://wiki.netbeans.org/InstallingNetbeans6.0OnFedora7
۱۶ بهمن ۸۶ ، ۰۸:۵۲ ۰ نظر موافقین ۰ مخالفین ۰
سعید زرین فام

TIOBE Programming Community

Hi

This is useful site for comparing programming language popularity .

TIOBE Programming Community
۱۵ بهمن ۸۶ ، ۰۷:۳۹ ۰ نظر موافقین ۰ مخالفین ۰
سعید زرین فام

آدمهای بزرگ

برای انسانهای بزرگ هیچ بن بستی وجود ندارد ، زیرا آنان بر این باورند که :
یا راهی خواهم یافت و یا راهی خواهم ساخت
۰۲ بهمن ۸۶ ، ۰۷:۴۹ ۴ نظر موافقین ۰ مخالفین ۰
سعید زرین فام

Change jvm heap size

Hi

We can change jvm heap size with following runtime parameter :

java -Xms -Xmx

example :

java -Xms32m -Xmx512m

you can see these links for more parameter(switch) :

http://performance.netbeans.org/howto/jvmswitches/index.html
http://java.sun.com/javase/technologies/hotspot/vmoptions.jsp
http://java.sun.com/docs/hotspot/gc5.0/gc_tuning_5.html
۲۳ دی ۸۶ ، ۱۲:۵۹ ۰ نظر موافقین ۰ مخالفین ۰
سعید زرین فام

دلبستگی به دنیا

بگذارید و بگذرید , ببینید و دل مبندید ، چشم بیندازید و دل مبازید که دیر یا زود باید گذاشت و گذشت.
۲۳ دی ۸۶ ، ۱۰:۳۱ ۴ نظر موافقین ۰ مخالفین ۰
سعید زرین فام

Using apt to install one or more .deb files

Hi friends

First create a directory where you will place all your .deb files. For this example, I will use /home/debs. Copy all .deb files to this directory. Change into this directory:

cd /home/debs

Create a Packages.gz file with this command:

dpkg-scanpackages . /dev/null | gzip -c -9 > Packages.gz

Edit to your sources.list file and add a line like this:

deb file:///home/debs /

Update your package lists:

apt-get update

Now you can install your package with apt-get.

۱۶ دی ۸۶ ، ۱۳:۴۴ ۰ نظر موافقین ۰ مخالفین ۰
سعید زرین فام

Access to the dom element on the client side in woodstock components

Hi friends

I had some problem with accessing to the dom element in Netbeans 6 visual web . my problem solved with this post from venky .

thanks venky.
۱۱ دی ۸۶ ، ۱۵:۴۷ ۰ نظر موافقین ۰ مخالفین ۰
سعید زرین فام

پذیرش تقدیر

خداوندا آرامشی عطا فرما
تا بپذیرم آنچه را تغییر نایافتنی است
شهامتی تا تغییر دهم آن چه را می توانم
و دانشی تا بدانم تفاوت آن دو را

جبران خلیل جبران
۰۱ دی ۸۶ ، ۱۴:۲۴ ۳ نظر موافقین ۰ مخالفین ۰
سعید زرین فام

owning side of the relationship in JPA

Hi friends

There are some peculiarities with bidirectional relationships in JPA. With all bidirectional relationship types, including one-to-one, there is always the concept of an owning side of the relationship. see this sample :

@Entity
public class CreditCard implements java.io.Serializable
{
@OneToOne(mappedBy="creditCard")
private Customer customer;

public Customer getCustomer( )
{
return this.customer;
}

public void setCustomer(Customer customer)
{
this.customer = customer;
}
}


@Entity
public class Customer implements java.io.Serializable
{
@OneToOne
(cascade={CascadeType.ALL})
@JoinColumn(name="CREDIT_CARD_ID")
private CreditCard creditCard;

public CreditCard getCreditCard( )
{
return creditCard;
}

public void setCreditCard(CreditCard card)
{
this.creditCard = card;
}
}

Although a setCustomer( ) method is available in the CreditCard bean class, it will not cause a
change in the persistent relationship if we set it. When we marked the @OneToOne relationship in the CreditCard bean class with the mappedBy( ) attribute, this designated the CreditCard entity as the inverse side of the relationship. This means that the Customer entity is the owning
side of the relationship.
If you wanted to associate a CreditCard instance with a different Customer , you would have to call setCreditCard( ) on the old Customer, passing in null, and then call setCreditCard( ) on the new Customer:

Customer newCust = em.find(Customer.class, newCustId);
CreditCard card = oldCustomer.getCreditCard( );
oldCustomer.setCreditCard(null);
newCust.setCreditCard(card);

bye.
۰۱ دی ۸۶ ، ۱۴:۲۴ ۰ نظر موافقین ۰ مخالفین ۰
سعید زرین فام

دوست داشتن

دوست داشتن کسانی که دوستمان می‌دارند کار بزرگی نیست، مهم آن است آنهایی را که ما را دوست ندارند، دوست بداریم
۰۸ آذر ۸۶ ، ۰۹:۴۱ ۳ نظر موافقین ۱ مخالفین ۰
سعید زرین فام

تفریح


دیروز تفریح تازه ای اختراع کردم وقتی خواستم آن را اجرا کنم یک فرشته و شیطان دوان دوان به خانه ام آمدند از پشت در می شنیدم که یکی می گفت این گناه است دیگری می گفت عین تقوا است.
منبع: پیامبر و دیوانه /جبران خلیل جبران

۰۷ آذر ۸۶ ، ۱۵:۳۵ ۲ نظر موافقین ۰ مخالفین ۰
سعید زرین فام

User Interface Prototype

Hi friends

User interface prototype is one of the most important artifact i have ever seen because this artifact is useful for almost all member of project team member . this artifact impact to the other artifact.
for example requirements specifiers can use this artifact for better gathering requirement of the project .
For creating user interface prototype we have to use Storyboard artifact and they have to be the same .

۰۷ آذر ۸۶ ، ۱۵:۰۷ ۰ نظر موافقین ۰ مخالفین ۰
سعید زرین فام