PDA

View Full Version : حرفه ای: طراحی فرم های کاربر پسند



teymoorei
چهارشنبه 07 خرداد 1393, 12:55 عصر
سلام دوستان

با توجه به این که مطمئنم این تاپیک مشکل خیلی از دوستانه و خیلی هم مهمه خواستم بپرسم که :

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

حالا میخوام ببینم در جاوا چه باید کرد ؟

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

حالا اساتید بزرگوار لطفا راهنمایی کننده که بهترین راه حل ها چیه و باید چه کرد ؟

باتشکر

jrl_golestani
چهارشنبه 07 خرداد 1393, 13:18 عصر
سلام دوست عزیز
با چه IDE کا میکنی؟

Tiyana
چهارشنبه 07 خرداد 1393, 13:24 عصر
شما اگه برای جاوا از eclipse استفاده کنید با نصب پلاگین window builder میتونیین به راحتی و با درگ کردن ، فرم هاتون رو طراحی کنید و برای اونا اکشن بسازید البته میدونم که netbeans هم همچین محیطی داره اما خودم تجربش نکردم و درمورد منابع باید بگم که اگه دنبال منابع فارسی میگردید به ندرت میتونید یه آموزش خوب پیدا کنید اما منابع انگلیسی زیادی بر خلاف فارسی وجود داره که میتونید جاوا رو از رو اونها یاد بگیرید و پیشنهاد میکنم برای یادگیری دنبال منابع فارسی نباشید...

teymoorei
چهارشنبه 07 خرداد 1393, 13:25 عصر
من از netbeans استفاده میکنم .

jrl_golestani
چهارشنبه 07 خرداد 1393, 13:28 عصر
اگه با eclipse کار میکنی و میخوای فعلا سریع و مثل VisualStudio راحت از wizard استفاده کنی میتونی از plugin های مثل JFormDesigner , .. استفاده کنی ولی کار کردن با swing مخصوصا javafx اصلا سخت نیست . فقط تلاش بیشتر میخواد .

jrl_golestani
چهارشنبه 07 خرداد 1393, 13:29 عصر
تو netbean که راحت میتونی از wizard استفاده کنی . پلاگین ام داره میتونی استفاده کنی.

teymoorei
چهارشنبه 07 خرداد 1393, 14:40 عصر
دوستان من منظورم بیشتر منوهایی مثل ribbonbar کامپوننت های جدید و زیباست

vahid-p
چهارشنبه 07 خرداد 1393, 16:41 عصر
شما کامپوننت های SWING که استفاده کنید و توسط look&feel حالت ویندوزی رو تنظیم کنید، خودش شبیهش میشه. تازه Ribbon Bar رو میشه با Tabbed Pane تقریبا پیاده سازی کرد.

teymoorei
چهارشنبه 07 خرداد 1393, 17:03 عصر
ممنونم اما
look&feel چی هست ؟

vahid-p
چهارشنبه 07 خرداد 1393, 17:41 عصر
look&feel ظاهر Button , TextFiled و... رو تغییر میده. ظاهرشون رو نه ماهیتشون.

بعضی look&feel ها همه جا یکسان عمل میکنند. ولی اگر از look & feel windows استفاده کنی، اونوقت برای نسخه های مختلف ظاهر همون نسخه رو میگیره. مثلا :
XP:
http://www.leepoint.net/notes-java/GUI-appearance/laf/windows-laf.gif
seven :
http://lh5.ggpht.com/_U4IXEZDfYcA/TOyLGlp6WtI/AAAAAAAAAHw/9_Ej0Tw6Dig/Windows_thumb3.jpg?imgmax=800

ویندوز 8 : (Metro)
https://pixelduke.files.wordpress.com/2013/11/togglebutton-light-theme.png


یا مثلا look&feel های قشنگتری هم هست که حالا یا به صورت پیشفرض مثل nimbus تو خود جاوا همراش هست یا میتونی دانلود کنی.
nimbus:
http://docs.oracle.com/javase/tutorial/figures/uiswing/lookandfeel/nimbus.png


---------------------

شبیه MAC : ( این دیگه ثابته، حتی رو ویندوز اجرا کنی هم ظاهرش مثل MAC میشه )
http://www.randelshofer.ch/quaqua/images/quaqua-3.6.png
http://www.randelshofer.ch/quaqua/images/quaqua_metalworks.png

یا مثلا GiS :
http://www.centigrade.de/resources/images/gallery/en/Gallery-GiS-JavaSwingLookAndFeel.png

,.....................

teymoorei
چهارشنبه 07 خرداد 1393, 18:26 عصر
ممنون خیلی جالب بود برام
میشه بگید چطور باید این کارارو انجام بدم ؟

مخصوصا
GiS رو

jrl_golestani
چهارشنبه 07 خرداد 1393, 18:34 عصر
LookAndFell رو اینطوری تنظیم میکنن:
}try
. UIManager
;( "setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel
| catch (ClassNotFoundException | InstantiationException{
} ( IllegalAccessException | UnsupportedLookAndFeelException e
;() e.printStackTrace
{

teymoorei
چهارشنبه 07 خرداد 1393, 18:43 عصر
ببخشید اما کجا این کد رو بنویسم ؟

jrl_golestani
چهارشنبه 07 خرداد 1393, 19:10 عصر
} ()public MainForm
;()init
{

;() private void init
; int width = 350
; int height = 285
;() Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize
; ( int x = (dimension.width / 2) - (width / 2
; ( int y = (dimension.height / 2) - (height / 2
}try
. UIManager
;( "setLookAndFeel("com.sun.java.swing.plaf.nimbus.Ni mbusLookAndFeel
| catch (ClassNotFoundException | InstantiationException{
} ( IllegalAccessException | UnsupportedLookAndFeelException e
;() e.printStackTrace
{

;( super.setDefaultCloseOperation(WindowConstants.EXI T_ON_CLOSE
;( super.setLocation(x, y - 200
;( super.setSize(width, height
;(" super.setTitle("Calculator
;( super.setResizable(false
; (() super.add(getPnlMain
; ( () super.setJMenuBar(getMainMenu
{

jrl_golestani
چهارشنبه 07 خرداد 1393, 19:11 عصر
تو constructor کلاست بنویس .

teymoorei
چهارشنبه 07 خرداد 1393, 19:23 عصر
ببخشید تو ی init بنویسم شون ؟

jrl_golestani
چهارشنبه 07 خرداد 1393, 19:26 عصر
کد بالا رو نگاه کن تو متد init نوشتم متد init تو constructor صدا زدم .

teymoorei
جمعه 20 تیر 1393, 03:27 صبح
ببخشید با تا خیر زیاد سوالم رو میپرسم


اولا که init غیر قابل تغییره


دوما توی تابع سازنده این تابع رو نوشتم اما هیچ تغییری ایجاد نشد .


حال باید چه کرد ؟


باتشکر فراوان

dasssnj
جمعه 20 تیر 1393, 04:16 صبح
کسی لایسنس jformdesigner را داره؟

vahid-p
جمعه 20 تیر 1393, 05:00 صبح
اولا که init غیر قابل تغییره

هر چیزی قابل تغییره. حتی اونایی که غیرقابل تغییره هم از طریق custome code میتونید بنویسید. اما نیازی به اینکار نیست.
شما میتونید در کد بالا که دوستمون گذاشتن کد look and feel رو داخل init ننویسید بلکه قبل از init در کانستراکتور بنویسید.

public MyForm(){
try{
UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
}catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException e){
e.printStackTrace();
}
init();
}


من خودم که معمولا اگر کلاس Main داشته باشم که تو کلاس Main پنجره رو new کرده باشم قبل از new MyForm(); اینو مینوشتم. نیازی نیست حتما تو کلاس MyForm باشه. چون UImanager.setLookAndFeel یک متد static است و هر جای برنامه اونو set کنی برای کلاس ها اون برنامه همش همون یک مقدار وجود خواهد داشت.

teymoorei
جمعه 20 تیر 1393, 11:01 صبح
ممنون

من همون اولم همین کار رو کردم و توی
کانستراکتور نوشتم اما ظاهر فرم اصلا هیچ تغییری نمیکنه .

حتی کد شما رو هم نوشتم اما بازم هیچ تغییری نکرد .

Ebrahimkh
جمعه 20 تیر 1393, 15:21 عصر
SwingUtilities.updateComponentTreeUI(this);
این رو هم بهش اضافه کن البته در زیر این قطعه کد
UIManager.setLookAndFeel("com.sun.java.swing.plaf. nimbus.NimbusLookAndFeel");

teymoorei
جمعه 20 تیر 1393, 18:14 عصر
این قطعه کد رو هم اضاف کردم اما بازم جواب نداد .

لطفا یه کد تست شده بدید

Ebrahimkh
شنبه 21 تیر 1393, 00:11 صبح
تو تابع mainمربوط به jframe بنویس اگه جواب نگرفتی تو سازند بنویس تست شده مال خود شرکت نت بینز :73:




try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClass Name());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(Op.class.getNam e()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(Op.class.getNam e()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(Op.class.getNam e()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(Op.class.getNam e()).log(java.util.logging.Level.SEVERE, null, ex);
}

teymoorei
شنبه 21 تیر 1393, 00:27 صبح
به Op.class خطا میده

Ebrahimkh
شنبه 21 تیر 1393, 00:34 صبح
دوست عزیز بجای Op شما باید نام کلاستون رو وارد کنید این کلاسی هستش که بنده از jframe مشتق گرفتم

teymoorei
شنبه 21 تیر 1393, 04:04 صبح
دیگه خطا نمیگیره اما هیچ تغییری هم ایجاد نشد

vahid-p
شنبه 21 تیر 1393, 08:48 صبح
میشه کل فولدر پروژتون رو آپلود کنید ببینیم مشکل از چیه؟

teymoorei
یک شنبه 22 تیر 1393, 12:16 عصر
سلام
اینم فایل پروژه :
دانلود (http://www.uplooder.net/cgi-bin/dl.cgi?key=c50c939209e4e33c6e2b274fe6357357)

Ebrahimkh
یک شنبه 22 تیر 1393, 16:03 عصر
سلام مهندس
تابع main رو به این شکل ویرایش کن
اگه بازم نشد بگو




public static void main(String args[]) {
try {
/* Set the Nimbus look and feel */
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/

UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");

//</editor-fold>

/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new NewJFrame().setVisible(true);
}
});
} catch (ClassNotFoundException ex) {
Logger.getLogger(NewJFrame.class.getName()).log(Le vel.SEVERE, null, ex);
} catch (InstantiationException ex) {
Logger.getLogger(NewJFrame.class.getName()).log(Le vel.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
Logger.getLogger(NewJFrame.class.getName()).log(Le vel.SEVERE, null, ex);
} catch (UnsupportedLookAndFeelException ex) {
Logger.getLogger(NewJFrame.class.getName()).log(Le vel.SEVERE, null, ex);
}
}

teymoorei
دوشنبه 23 تیر 1393, 04:15 صبح
هیچ تغییری نکرد
میشه یه پروژه درست کنین برام بفرستید ؟

vahid-p
دوشنبه 23 تیر 1393, 13:55 عصر
احتمالا مشکل شما از یه جا دیگست. پروژتون رو دانلود کردم و ران کردم ( با نت بینز 8 )، جواب میده.
گرچه تو ست کردن look&feel نیازی به شرط گذاشتن نبود، ولی خب با همون هم جواب میده.

دیگه نمیدونم مشکل از کجاست!

Ebrahimkh
دوشنبه 23 تیر 1393, 19:06 عصر
هیچ تغییری نکرد
میشه یه پروژه درست کنین برام بفرستید ؟


دوست عزیز زمانی که برنامتون رو ساختید اگه ممکنه یه Build بزنید

بعد دوباره ران کنید./