PDA

View Full Version : سوال: مشکل نمایش مجدد مقدار JFormattedText بعد از خالی شدنش



mostafabahrami
چهارشنبه 20 دی 1391, 23:09 عصر
سلام دوستان. یه مشکل کوچولو در مورد کار با JFormattedText باهاش مواجه شدم. اگه راهنمایی کنین ممنون میشم.
من چند تا از کامپوننت JFormattedText توی یه فرم (JFrame) دارم که خاصیت fomatfactory هر کدوم رو طبق چیزی که خواستم تنظیم کردم. مثلا یکی فقط عدد میگیره یکیش فقط تاریخ با فرمت دلخواه من و الی آخر. تا اینجا هیچ مشکلی نیست. من یه دکمه ثبت اطلاعات گذاشتم که بعد از خوندن مقدار این JFormattedTextهای روی فرم و ذخیره مقادیرش (مثلا تو یه آرایه یا فایل یا هر چی خیلی مهم نیست) این کامپوننتها رو خالی میکنه با فراخوانی متد setText با رشته "" یا مقدار null. تا اینجا هم مشکل خاصی نیست. یعنی همه چیز کار میکنه دیتام ذخیره میشه و کامپوننتها هم خالی میشن. اما مشکل اینجاست که این JFormattedText ها واقعا خالی نشدن. چون وقتی روی هر کدوم از JFormattedText ها که کلیک می کنم و از اون خارج میشم با مقدار قبل از پاک شدنش دوباره پر میشه یعنی اگه بعد از زدن دکمه ثبت و خالی شدن همه JFormattedText ها با ماوس روی تک تک JFormattedText ها فقط کلیک کنم و هیچی توش تایپ نکنم همشون با آخرین مقدار ثبت شده پر میشن که اصلا چیز جالبی نیست(برای کاربر). البته دلیلش خیلی تابلوئه . اونم اینه که اگه مقداری که توی یه JFormattedText وارد میشه طبق فرمت تعریف شدش نباشه موقع lost focus شدن cursor، توی JFormattedText قرار نمیگیره و همون مقدار قبلیش توش می مونه اصلا اساس کار و هدف JFormattedText هم همینه و دلیل خالی شدن کل اونها بعد از زدن دکمه اینه که چون از طریق کد انجام شده . میخاستم ببینم راه حلی وجود داره که این اتفاق نیفته؟؟

spiderman200700
چهارشنبه 20 دی 1391, 23:36 عصر
سلام
چرا میخوای کلا خالی بشه؟ خب طبق فرمتش بهش مقدار بده . مثلا مقدار خالی تاریخ رو "0000/00/00" در نظر بگیر.
به هر حال جزء اصوله که JFormattedText همیشه یه فرمت خاص داشته باشه.

mostafabahrami
پنج شنبه 21 دی 1391, 23:11 عصر
با تشکر از پاسختون. این چیزی که گفتن کاملا درسته و کار هم میکنه خیلی هم منطقیه و به لحاظ کد نویسی و ... خطایی نداره.اما من دنبال راهی واسه خالی کردن کلشون بودم بیشتر به خاطر کاربرم. البته کاربر رو میشه متقاعد کرد ولی بیشتر واسه خودم یه سوال شده.
یه سوال دیگه دارم. من اگه بخام حداکثر تعداد کاراکتر یا ارقام واردشده رو واسه ش تعیین کنم چطوریه؟ البته توی نت بینز توی خاصیت formatfactory که رفتم حالتهای مختلفی داشت همه شو تست کردم تو حالت mask میشد روی طول مقدار ورودی شرط گذاشت ولی همیشه باید مساوی اون طول کاراکتر وارد کنی. در صورتی که من میخام بعضی فیلدام کمتر یا مساوی تعداد کاراکتر خاصی وارد بشه اگه راهنمایی کنید ممنون میشم.

spiderman200700
جمعه 22 دی 1391, 00:45 صبح
لطفا کدتونو اینجا قرار بدید که ببینیم و بعد نظر بدیم

mostafabahrami
جمعه 22 دی 1391, 10:04 صبح
گفتم من کدی ننوشتم واسه کنترل طول ورودی. از design خود نت بینز استفاده کردم کدی که خودش تولید کرد این بود :
billNO_txt.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter(new java.text.DecimalFormat("#0"))));
البته یه سرچ زدم دیدم کلاس MaskFormatter میتونه مشکل رو حل کنه اینم کدش :
MaskFormatter formatter = new MaskFormatter("###");
formatter.install(jformattedtextfield);
با MaskFormatter میشه خیلی mask های ترکیبی و پیشرفته ای رو تولید کرد که توضیحاتش توی این لینک هستش
http://docs.oracle.com/javase/1.4.2/docs/api/javax/swing/text/MaskFormatter.html
از پاسخگویی تون بازم ممنونم

spiderman200700
جمعه 22 دی 1391, 10:25 صبح
لطفا اول سرچ رو بزنید ، بعد اگه به نتیجه نرسیدید اینجا تاپیک بزنید.

mostafabahrami
جمعه 22 دی 1391, 12:49 عصر
لطفا اول سرچ رو بزنید ، بعد اگه به نتیجه نرسیدید اینجا تاپیک بزنید.

اوکی . من همیشه این کارو میکنم . اما من خودم همیشه اول تو این سایت سرچ میکنم. اگه به نتیجه رسیدم که هیچی ، اگرنه با چیزایی که تو انجمن دستگیرم میشه حالا میدونم تقریبا باید دنبال چی بگردم . میرم سرچ میکنم . آخر سر اگه نشد تاپیک میزنم! راجع به این موضوع هم اول اینجا سرچ کردم 2-3 تا تاپیک بود که اونی که من میخاستم نبود. با سرچ گوگل به 2-3 تا راه حل رسیدم مثل همین formatfactory یا متد setDocument و ... که یا اون کاری که من میخاستمو کامل انجام نمیداد یا امکان استفادش تو برنامم نبود.
تازه شم تاپیک گذاشتن هم تو همچین مواقعی چیز خیلی بدی نیس چون ممکنه همین مشکل رو خیلیای دیگه داشته باشن. من خودم خیلی مواقع از تاپیکای دیگران مشکلاتمو حل کردم. از تعداد کم پستهام معلومه.
منم مثل شما خوشم نمیاد واسه هر چیز کوچیکی سریع یه تاپیک بذارم و مثل بعضیا بنویسم کمک فوری و نمیدونم از این چیزا که بهتر میدونید. آدم اگه میخاد چیزی یاد بگیره باید وقت بذاره واسش.
مجددا از این که واسه سوالات وقت میگذارید ممنون.