PDA

View Full Version : تغییر لوک اند فیل فریم جاری Look And Feel



emad4000
شنبه 12 خرداد 1386, 14:50 عصر
سلام
من توی فریمم می خوام با زدن یه دکمه لوک اند فیل همون صفحه (فریم) عوض شه



Button Click Event
...
UIManager.setLookAndFeel(...)


دستوری به این شکل نوشتم که آدرس یه لوک اند فیل رو بهش می دم ولی لوک اند فیل همه صفحات بعدی عوض میشه غیر از خودش
چیکار کنم که با کلیک یه باره لوک اند فیل همین صفحه جاری هم عوض شه
جی فریم یه متد به اسم repaint هم داره که فراخوانیش کردم ولی تغییر نکرد

pooyanm
شنبه 12 خرداد 1386, 17:38 عصر
SwingUtilities.updateComponentTreeUI(topComponent)

emad4000
چهارشنبه 16 خرداد 1386, 17:57 عصر
ممنون از لطفتون
مشکلم حل شد ولی یه ابهام کوچیک برام مونده
من یه سری LookAndFeel از اینترنت گرفتم . اگه ابتدای برنامه قبل از new کردن frame بیام یکی از این LookAndFeel های جدید رو ست کنم در حین اجرای برنامه اگه LookAndFeel رو عوض کنم مشکلی پیش نمیاد


UIManager.setLookAndFeel(new FirstLookAndFeel());
JFrame frame = new JFrame();
.
.
.
UIManager.setLookAndFeel(new SecondLookAndFeel());
SwingUtilities.updateComponent(this);


ولی اگه از ابتدا عوضش نکنم یا یکی از LookAndFeel های کتابخونه های خودش رو قرار بدم در حین اجرای برنامه اگه LookAndFeel رو عوض کنم همه چیز عوض میشه غیر از نوارعنوان بالای صفحه که شامل Tittle و Button هاست . چرا ؟؟؟



UIManager.setLookAndFeel(new MetalLookAndFeel());
JFrame frame = new JFrame();
.
.
.
UIManager.setLookAndFeel(new SecondLookAndFeel());
SwingUtilities.updateComponent(this);

pooyanm
چهارشنبه 16 خرداد 1386, 19:50 عصر
اگر updateComponentTreeUI بلادرنگ پس از setLookAndFeel بیاد و بالاترین شیء (در اینجا فریم) را به اون بفرستی همه component هایی که به شیء بالایی add شدن و همه اونایی که از این پس نمونه سازی می شن به درستی نمای تازه را به خودشون می گیرن. اگه شما dialog یا فریم درون برنامه هم داری باید این متد بروزرسانی را برای اونا هم به کار بگیری یا برای هر بار کاربرد اونا به جای setVisible دوباره از اونا نمونه سازی کنی. از نماهایی که تاکنون من به کار گرفتم تنها Synthetica در بازگشت به نماهای دیگه ناسازگاری داره و تنها راه ذخیره نمای کنونی و آغاز دوباره برنامه هست.
من با بروزرسانی دکمه های میله ابزار (toolbar) مشکلی تا کنون نداشتم درباره title هم اگه به طور خاص نوار عنوان (titlebar) منظورتون هست اگر تغییری ایجاد نشده به طور پیش گزیده native نمایش داده می شه.

emad4000
پنج شنبه 17 خرداد 1386, 13:58 عصر
درباره title هم اگه به طور خاص نوار عنوان (titlebar) منظورتون هست اگر تغییری ایجاد نشده به طور پیش گزیده native نمایش داده می شه.

منظورم دقیقا TittleBar ه . بقیه اش درسته . من this (یعنی فریمم) رو update می کنم و همه Component ها update میشن ولی TittleBar مشکل داره . یعنی چی native نمایش داده میشه . چه جوری باید تغییرش بدم ؟؟

pooyanm
پنج شنبه 17 خرداد 1386, 19:10 عصر
نَتیو یعنی عنوانها در ویندوز یک رنگ و اندازه ای هست و در لینوکس و ... یک رنگ و اندازه متفاوت داره یعنی مشابه پنجره های معمولی هر محیط. اگر بخوای این عنوانها هم بر اساس نما عوض بشن باید این دو دستور را بکار ببری:
JFrame.setDefaultLookAndFeelDecorated(true);
JDialog.setDefaultLookAndFeelDecorated(true);