نمایش نتایج 1 تا 7 از 7

نام تاپیک: تعیین فرمت برای یک تکس فیلد

  1. #1
    کاربر جدید
    تاریخ عضویت
    تیر 1391
    محل زندگی
    خوزستان
    پست
    7

    تعیین فرمت برای یک تکس فیلد

    سلام.

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

    فکر کنم باید از JFormattedTextField استفاده کنم! ولی چجوریش رو نمیدونم... راهنمایی کنین ممنون میشم.

  2. #2

    نقل قول: تعیین فرمت برای یک تکس فیلد

    با استفاده از KeyListener هم میتونی همه جوره TextField رو محدود کنی

  3. #3
    کاربر جدید
    تاریخ عضویت
    تیر 1391
    محل زندگی
    خوزستان
    پست
    7

    نقل قول: تعیین فرمت برای یک تکس فیلد

    میشه یکم بیشتر توضیح بدی درباره همین KeyListener ؟؟ :( که چجور برا این کار گفتم میشه ازش استفاده کرد ؟!

    مرسی

  4. #4

    نقل قول: تعیین فرمت برای یک تکس فیلد

    با add کردن یه KeyListener به JTextField میتونی ورودی و خروجی ها رو کنترل کنی.
    مثلا مثال زیر برای اینه که توی JTextField فقط عدد وارد بشه:
            textField.setBackground(Color.WHITE);
    textField.addKeyListener(new KeyAdapter() {

    @Override
    public void keyPressed(KeyEvent e) {
    textField.setEditable(false);
    if (e.getKeyChar() >= '0' && e.getKeyChar() <= '9') {
    textField.setText(textField.getText() + e.getKeyChar());
    }
    if (e.getKeyCode() == 8) {
    textField.setEditable(true);
    }
    }
    });

  5. #5
    کاربر جدید
    تاریخ عضویت
    تیر 1391
    محل زندگی
    خوزستان
    پست
    7

    نقل قول: تعیین فرمت برای یک تکس فیلد

    آها ، متوجه شدم ممنون :X

  6. #6
    کاربر دائمی
    تاریخ عضویت
    اسفند 1384
    محل زندگی
    تهران
    سن
    44
    پست
    966

    نقل قول: تعیین فرمت برای یک تکس فیلد

    نقل قول نوشته شده توسط spiderman200700 مشاهده تاپیک
    با add کردن یه KeyListener به JTextField میتونی ورودی و خروجی ها رو کنترل کنی.
    مثلا مثال زیر برای اینه که توی JTextField فقط عدد وارد بشه:
            textField.setBackground(Color.WHITE);
    textField.addKeyListener(new KeyAdapter() {

    @Override
    public void keyPressed(KeyEvent e) {
    textField.setEditable(false);
    if (e.getKeyChar() >= '0' && e.getKeyChar() <= '9') {
    textField.setText(textField.getText() + e.getKeyChar());
    }
    if (e.getKeyCode() == 8) {
    textField.setEditable(true);
    }
    }
    });
    این روش، روش اشتباهی می باشد. و به اضای هر کلید یک متدود از اول تا آخر صدا زده می شود

    روش صحیح برای کنترل کردن اکثر کامپونت های javax.swing درست کردن یک مدل هست.

    در این قسمت شما باید از طریق property setDocument می تونی این مشکل و خیلی از مشکل های دیگه مثل انیکه فقط عدد بگیره یا مثلا با صفر شرو بشه یا نشه بین یک بازه باشه مثل اگر عدد هست بین 100 تا 1000 باشه .

    به این کد دقت کند

    public class CMSTextFieldDocument extends PlainDocument {


    private int length;
    private boolean isNumeric;
    private boolean canZeroInFirst = false;

    public CMSTextFieldDocument() {

    }

    public CMSTextFieldDocument(int length, boolean isNumeric, boolean canZeroInFirst) {
    this.length = length;
    this.isNumeric = isNumeric;
    this.canZeroInFirst = canZeroInFirst;

    }


    public boolean isCanZeroInFirst() {
    return canZeroInFirst;
    }

    public void setCanZeroInFirst(boolean canZeroInFirst) {
    this.canZeroInFirst = canZeroInFirst;
    }

    /**
    * Constructs a plain text document. A default model using
    * <code>GapContent</code> is constructed and set.
    */
    public CMSTextFieldDocument(int length, boolean isNumeric) {
    this.length = length;
    this.isNumeric = isNumeric;
    }

    public void setLength(int length) {
    this.length = length;
    }

    public void setNumeric(boolean numeric) {
    isNumeric = numeric;
    }

    /**
    * Inserts some content into the document.
    * Inserting content causes a write lock to be held while the
    * actual changes are taking place, followed by notification
    * to the observers on the thread that grabbed the write lock.
    * <p/>
    * This method is thread safe, although most Swing methods
    * are not. Please see
    * <A HREF="http://java.sun.com/docs/books/tutorial/uiswing/misc/threads.html">How
    * to Use Threads</A> for more information.
    *
    * @param offs the starting offset >= 0
    * @param str the string to insert; does nothing with null/empty strings
    * @param a the attributes for the inserted content
    * @throws javax.swing.text.BadLocationException
    * the given insert position is not a valid
    * position within the document
    */
    @Override
    public void insertString(int offs, String str, AttributeSet a) {

    if ((offs == 0) && (str.equals(" "))) {
    offs = 0;
    return;
    }
    if (str.endsWith("ی")) {
    str = "ي";
    }

    try {
    int offset = this.getEndPosition().getOffset();


    int l = this.getText(0, offset).length();

    if (l > length) {
    return;
    }


    // String text = this.getText(0, offs);
    if (str.length() > this.length) return;
    if (offs > this.length - 1) throw new BadLocationException(str, offs);
    if (this.isNumeric) {

    if (!canZeroInFirst) {
    if (offset > 0 && this.getText(0, offset).charAt(0) == '0') {
    super.remove(0, 1);
    offs = 0;

    // text.replaceFirst("0", "");
    // return;
    } else if (offs == 0 && l > 1) {
    return;
    }
    }
    Double.parseDouble(str);
    }

    super.insertString(offs, /*text+*/str, a);


    } catch (BadLocationException
    e) {
    return;
    } catch (NumberFormatException
    e) {
    return;
    }

    }


    }


    یکی از بزرگترین اشکالات روش قبلی اینکه به ازای هر textfield باید بری یک event بنویسی با این روش فقط کافی هست که jtextField.setDocument(new CMSTextFieldDocument(10,false,true) CMS

    یعنی اینکه به طول 10 باشه هم عدد بگیره هم کاراکتر و اولشم با صفر بتونه شروع بشه

  7. #7

    نقل قول: تعیین فرمت برای یک تکس فیلد

    درسته. ممنون از شما.
    البته من گفتم یکی از روش ها اینه. نه تنها روش.

تاپیک های مشابه

  1. پاسخ: 8
    آخرین پست: یک شنبه 27 دی 1388, 18:18 عصر
  2. تعیین فرمت برای یه ستون از VSFlexGrid
    نوشته شده توسط فاطمه وطن دوست در بخش برنامه نویسی در 6 VB
    پاسخ: 1
    آخرین پست: سه شنبه 10 اردیبهشت 1387, 00:50 صبح
  3. فرمت برای فیلد
    نوشته شده توسط elhamkarimi در بخش Access
    پاسخ: 1
    آخرین پست: شنبه 15 اردیبهشت 1386, 08:07 صبح
  4. تعیین فرمت اطلاعات در Grid
    نوشته شده توسط shsoft در بخش برنامه نویسی در 6 VB
    پاسخ: 8
    آخرین پست: پنج شنبه 10 دی 1383, 15:28 عصر
  5. پاسخ: 1
    آخرین پست: چهارشنبه 06 خرداد 1383, 13:24 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •