ورود

View Full Version : سوال: تعیین نوع ورودی در Formatted Field



SayyedMohammad
شنبه 01 خرداد 1395, 18:43 عصر
با سلام خدمت دوستان و اساتید گرامی.
یک ویژگی در Cشارپ و ویژوال بیسیک هست که وقتی یک ورودی text از کاربر میگیری میتونی تعیین کنی که کاربر فقط بتونه String وارد کنه یا فقط int یا... .حالا من توی GUI جاوا دنبال همچین چیزی میگردم.شنیدم Formatted Field این امکان رو داره ولی هرچی تو Property اش میگردم پیدا نمیکنم همچین چیزی رو.لطفا اگر این امکان را داره راهنمایی بفرمایید که در کجا میتونم پیداش کنم.

vahid-p
یک شنبه 02 خرداد 1395, 14:30 عصر
تا جایی که من اطلاع دارم:
ساده ترین حالت شما می تونید از JFormattedTextField در Swing استفاده کنید و نوع مقادیر ورودی رو بهش بدی، اگر مقدار ورودی درست بود (مثلا فقط عدد بود) خودش برات , هاش رو میذاره و تمام(البته بعد از اینکه ورودی رو کامل بهش دادی، همزمان با ورود مقادیر فرمت دهی نداره).
در JavaFX که توصیه میکنم از JavaFX استفاده کنید، هم چنین چیزی با اندکی تغییر (اگر سرچ کنید TextFormatter در JavaFX) قابل پیاده سازی است. البته میتونید فیلتر بذارید مثلا فقط امکان گرفتن عدد رو داشته باشه و این خیلی سادست و اگر هر چیزی غیر عدد بود عملا هیچ تغییری در textfield تون نمی بینید. اما برای اینکه عدد 123456 به 123,456 تبدیل بشه فقط در حالتی مثل حالتی که برای Swing گفتم امکان پذیره.
اگر بخواهید همزمان با ورود مقدار اون رو چک کنه و فرمتش رو در هر بار ورود کاراکتر انجام بده یکم کد نویسی میخواد. یکی از نمونه هاش برای JavaFX رو در تاپیک "جداسازی سه تایی اعداد ، خطای java.lang.IllegalArgumentException (http://barnamenevis.org/showthread.php?523138-%D8%AC%D8%AF%D8%A7%D8%B3%D8%A7%D8%B2%DB%8C-%D8%B3%D9%87-%D8%AA%D8%A7%DB%8C%DB%8C-%D8%A7%D8%B9%D8%AF%D8%A7%D8%AF-%D8%8C-%D8%AE%D8%B7%D8%A7%DB%8C-java-lang-IllegalArgumentException)" گفتم (تو این مثال هر نوع عددی رو فرمت دهی میکنه، اعشاری، صحیح، عدد منفی).
اگر راه ساده تری باشه من در جریان نیستم، اگر نباشه میشه برای هر نوع ورودی یک نوع textfield با تغییر متد replace اش ایجاد کرد و برای اکثر ورودی ها کار خیلی پیچیده ای نیست. مثلا بخوای فقط کاراکتر غیرعددی وارد بشه، هم با replace میشه انجام داد که اگر عدد بود اصلا تکست فیلد رو آپدیت نکنه و همچنین با فیلتر که بالاتر توضیح دادم هم میشه جلوی ورود کاراکترهای ناخواسته رو گرفت. برای C#‎ سرچ کردم هم گویا چنین چیزی به صورت خیلی ساده وجود نداره و کارهای تقریبا مشابهی باید انجام بشه. اگر نمونش رو پیدا کردید لینکش رو بذارید.

اگر این توضیحات براتون مبهمه بگید برای Swing یا JavaFX می خواید و اینکه میخواید چه کاری رو انجام بده تا مثال ساده ای رو براتون بنویسم