Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: GUI и Java FX приложения > Маска для JFormatedTextField


Автор: goodday1941 11.12.2006, 12:48
как сделать маску вида 
23:47:36, тоесть что б первая цифра была 0,1,2 , вторая от 0 до 9 и тд...  smile  

Автор: LSD 11.12.2006, 14:50
Создать свой Formatter.

Автор: goodday1941 12.12.2006, 16:20
а можно примерчик простенький, типа... две цифры... оодна может быть от одного до трьех вторая от 5 до 7 =)

Автор: LSD 12.12.2006, 17:21
Простенький не получится.
Код
public class MyFormatter extends JFormattedTextField.AbstractFormatter
{
  public void install(JFormattedTextField ftf)
  {
    Document doc = ftf.getDocument();
    if(doc instanceof AbstractDocument)
      ((AbstractDocument) doc).setDocumentFilter(new NumberFilter());
  }

  public Object stringToValue(String text) throws ParseException
  {
    //распарсить строку, для даты можно использовать SimpleDateFormat
  }

  public String valueToString(Object value) throws ParseException
  {
    //преобразовать объект в строку, для даты опять же можно использовать SimpleDateFormat
  }
}

Код
public class NumberFilter extends DocumentFilter
{
  private Document document;

  public NumberFilter(Document document)
  {
    this.document = document;
  }

  public void insertString(FilterBypass fb, int offset, String string, AttributeSet attr) throws BadLocationException
  {
    if(string.length() + document.getLength() < 2)//проверяем общую длинну документа
    {
      if(checkChar(offset, string))
        fb.insertString(offset, string, attr);
    }
  }


  public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException
  {
    if(text.length() + document.getLength() - length < 2)//проверяем общую длинну документа
    {
      if(checkChar(offset, text))
        fb.replace(offset, length, text, attrs);
    }
  }


  public void remove(FilterBypass fb, int offset, int length) throws BadLocationException
  {
    fb.remove(offset, length);//удалять можно всегда
  }

  private boolean checkChar(int offset, String string)
  {
    boolean result = true;
    for(int i = string.length(); i >= 0; i--)
    {
      char c = string.charAt(i);
      //проверяем допустимость данного символа, на данной (offset+i) позиции. Если нет, то result = false 
    }
    return result;
  }
}

Автор: goodday1941 13.12.2006, 11:44
спасибо за примеры, буду пробвать  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)