PDA

View Full Version : سوال: Panel رو Panel



hasanain
جمعه 09 مهر 1389, 05:34 صبح
شاید سؤالم خنده دار به نظر بیاید اما پروژه ام بند به این مسأله است که در کمال تعجب در جاوا به بن بست رسیده.

توضیح اینکه پروژه ای در VB داشتم که در حال تبدیل به Java است تا با شبکه و دیگر مسائل بهتر پیش برود.
در VB ما خصوصیتی برای هر کنترل داشتیم که ZOrder نام داشت جهت تعیین کنترلی که باید رو و on Top باشد و واقعا و به درستی کار میکرد. اما انگار در Java چنین نیست.

در نمونه ای که پیوست گذاشتم، دو عدد Panel روی هم آمده اند. کافی است که قدری ماوس را روی آن یکی ببرید و مثلا با Combo کمی کار کنید و بعد ماوس را روی این یکی پنل ببرید تا ببینید چه فاجعه ای رخ میدهد!! :متعجب: اینجاست که عرض میکنم: کــــمــــک

اگر راهی به ذهن دوستان میرسد، دریغ نفرمایند.
حتی برای سادگی کار، میتوانید دو عدد Button را کمی روی هم قرار دهید. خواهید دید که با حرکت ماوس اولویت درستی برای کنترل رویی قائل نیست.

ermia2008
دوشنبه 12 مهر 1389, 11:10 صبح
سلام
جاوا هم چنین چیزی رو داره.
کامپوننتها تابعی با نام setComponentZOrder دارن که order اونها رو تعیین میکنه که این کار رو از طریق کدنویسی میتونید انجام بدید. در این مورد تحقیق کنید احتمالا مشکلتون حل بشه

موفق باشید

hasanain
دوشنبه 12 مهر 1389, 20:48 عصر
تشکر میکنم از جناب ermia2008 که زحمت کشیدند و این تاپیک از سوت و کور بودن بیرون آمد. اما متأسفانه باید عرض کنم که این پاسخ هم افاقه نکرد.

نکند که به نوعی باگ در جاوا است؟!

javaphantom
چهارشنبه 14 مهر 1389, 21:01 عصر
تشکر میکنم از جناب ermia2008 که زحمت کشیدند و این تاپیک از سوت و کور بودن بیرون آمد. اما متأسفانه باید عرض کنم که این پاسخ هم افاقه نکرد.

نکند که به نوعی باگ در جاوا است؟!

من دیدم برنامتو منتها نمی فهمم این طراحی رو از کجا آوردی یعنی این چه طراحی کرده ای منطقشو رو نمی فهمم panel قهوی رو بکش پایین تر یا اینکه یه برنامه به من نشون بده که می خوای مثل اون طراحی کنی

hasanain
پنج شنبه 15 مهر 1389, 21:42 عصر
من دیدم برنامتو منتها نمی فهمم این طراحی رو از کجا آوردی یعنی این چه طراحی کرده ای منطقشو رو نمی فهمم panel قهوی رو بکش پایین تر یا اینکه یه برنامه به من نشون بده که می خوای مثل اون طراحی کنی

با تشکر: منطقش اینه که جهت ویرایش یکی از سلولهای Grid، به جای نمایش Combo میخواهم به کاربر یک چیزی نمایش داده شود که چند ستونه باشد یعنی یه چیز تو مایه های Grid دوم... آخرش میرسیم به دو کنترل روی هم که در Java انگاری جواب نمیدهد. در VB من همین کار رو کرده بودم و کار میکرد. (عکس ضمیمه)

نمیدانم روش استانداردی دارد یا نه؟ اگر هست که بفرمایید تا بی خیال روش فعلی ام شوم. البته به شرطی که شبیه همین روش، راحتی را به کاربر هدیه دهد نه به برنامه نویس!

hasanain
یک شنبه 18 مهر 1389, 16:14 عصر
دوستان! اساتید!

تقاضا دارم یه نیم نگاهی به این تاپیک و مشکل مطرح شده بیاندازید. قبل تر ها زودتر به جواب میرسیدیم.

romixery
دوشنبه 19 مهر 1389, 11:22 صبح
نکند که به نوعی باگ در جاوا است؟!
حتماً شوخي مي كنيد :متفکر:
دوست عزيز. جاوا چيزي داره به نام Layerd Pane كه بسيار پيشرفته تر از Zorder بازي مايكروسافت هست.
اين صفحه رو ببينيد:
http://download.oracle.com/javase/tutorial/uiswing/components/layeredpane.html

شما در LayerdPane قادر خواهيد بود تا هر شيئ رو در لايه هاي مختلف جاسازي كنيد. مثل Photoshop.

jlover
دوشنبه 19 مهر 1389, 20:22 عصر
...

توضیح اینکه پروژه ای در VB داشتم که در حال تبدیل به Java است تا با شبکه و دیگر مسائل بهتر پیش برود.
در VB ما خصوصیتی برای هر کنترل داشتیم که ZOrder نام داشت جهت تعیین کنترلی که باید رو و on Top باشد و واقعا و به درستی کار میکرد. اما انگار در Java چنین نیست.

در نمونه ای که پیوست گذاشتم، دو عدد Panel روی هم آمده اند. کافی است که قدری ماوس را روی آن یکی ببرید و مثلا با Combo کمی کار کنید و بعد ماوس را روی این یکی پنل ببرید تا ببینید چه فاجعه ای رخ میدهد!! :متعجب: اینجاست که عرض میکنم: کــــمــــک

اگر راهی به ذهن دوستان میرسد، دریغ نفرمایند.
حتی برای سادگی کار، میتوانید دو عدد Button را کمی روی هم قرار دهید. خواهید دید که با حرکت ماوس اولویت درستی برای کنترل رویی قائل نیست.


با تشکر: منطقش اینه که جهت ویرایش یکی از سلولهای Grid، به جای نمایش Combo میخواهم به کاربر یک چیزی نمایش داده شود که چند ستونه باشد یعنی یه چیز تو مایه های Grid دوم... آخرش میرسیم به دو کنترل روی هم که در Java انگاری جواب نمیدهد. در VB من همین کار رو کرده بودم و کار میکرد. (عکس ضمیمه)

نمیدانم روش استانداردی دارد یا نه؟ اگر هست که بفرمایید تا بی خیال روش فعلی ام شوم. البته به شرطی که شبیه همین روش، راحتی را به کاربر هدیه دهد نه به برنامه نویس!

میدونید، من هم درست نتونستم متوجه بشم که شما چه انتظاری از ر.ک.گ برنامه تون دارید! یعنی میخواید که چطوری نشون داده بشه؟


حتماً شوخي مي كنيد :متفکر:
دوست عزيز. جاوا چيزي داره به نام Layerd Pane كه بسيار پيشرفته تر از Zorder بازي مايكروسافت هست.
اين صفحه رو ببينيد:
http://download.oracle.com/javase/tutorial/uiswing/components/layeredpane.html

شما در LayerdPane قادر خواهيد بود تا هر شيئ رو در لايه هاي مختلف جاسازي كنيد. مثل Photoshop.
البته جاوا هم ممکنه ایراداتی داشته باشه، نمونه ای که کاملا شبیه این مسئله هست overlap شدن کمپوننتهای awt و swing در یک پنجره ست که یادم میاد چند وقت پیش یه مقاله تو همونسایت سان دیدم که یه workaround معرفی کرده بود و تا حدودی این مسئله رو مرتفع میکرد و وعده داده شده بود که در نسخه ی هفتم Java SE میشه از هر دو دسته مولفه در کنار هم استفاده کرد...(دیگه بعدا چک نکردم، چون احتیاجی هم نبود/ف و هر جا بشه از همون سوئینگ استفاده میکردم)
گرچه در این نمونه ما فقط مولفه های سویینگ رو داریم!

------------------------------------------------------------
در این نمونه ای هم که قرار دادید، مسلما یک طراحی کاملا بی نظم وجود داره که نمیشه ازش انتظار زیادی داشت! و نشون دهنده ی اونچه که انتظارش رو دارید و اونچه که در عمل میبینید (دور از انتظار) ، با توجه به اون عکس نمیتونه باشه
چون دو مولفه دقیقا دارن فضای یکسانی رو اشغال میکنند و فقط بواسطه همون layered pane منطقیه که قابل سازماندهی باشند.
ولی اگه میخواید شبیه اون عکسه باشه، خب چند تا راه ممکنه داشته باشین:

- میتونید برید و مدلهای کمبو باکس رو بررسی کنین ببینید چیکار میشه کرد! (من تو برش نرفتم هنوز متاسفانه)
- میتونید از layered pane ها یا tabbed pane ها استفاده کنید ...
- حتی میتونید برای هر فقره از اقلام کمبو باکس یک شنودگر ثبت کنید تا وقتی انتخاب شد یک دایالوگ نمایش داده بشه! (یا اصلا واسه خود کمبو باکس یک ActionListener ثبت کنید..)


برای هر چه نزدیکتر شدن به اون عکس من حدس میزنم باید دنبال یه مدلی غیر از مدل پیشفرض کمبو باکس باشید
(به نظر من)


راستی توی همین نمونه ای که قرار دادین، اون مولفه هایی که توی jPanel1 قرار نداره (یعنی اونایی که تو اون ناحیه ی رنگی نیست) رو در یک پنل قرار بدید، ببینید باز هم روی هم قرار میگیرند (overlap میشن) ؟

mazdadoost
دوشنبه 19 مهر 1389, 21:35 عصر
سلام .ضمن تشکر از همگی دوستان .بنده مدتی هست که زیاد با swing درگیری نداشتم و در نتیجه به خاطر فراریت اطلاعات این مبح ثیک مقداری از شاید خوب نباشه که وارد بحث بشم .
پیشنهاد من اینه که : رندرر کمبو باکستون رو به یک jdialog تغیر بدین که undecorated شده باشه!
توی اون jdialog هم با یه jtable پر کنید!!!
موفق باشید.

mohsensaghafi
چهارشنبه 21 مهر 1389, 03:17 صبح
سلام.
دوست عزیز ببین این کاری که من کردم به کارت می آد؟!
هر چند که باید واسه طراحی گرافیکی این چنین صفحه هایی راه های دیگری وجود داشته باشد.
موفق و پیروز