2015-06-12 20 views
-2

У меня 4 текстовых полей JTextField, которые должны только принимать определенные символы:Ограничить JTextField, чтобы принимать только набор символов

  1. двоичных цифр (0, 1)
  2. восьмеричные цифры, так что (0-7)
  3. всех цифры (0-9)
  4. всех шестнадцатеричных символов (0-9, AF, AF)

Как я могу добиться этого? Пользователь не должен иметь возможность вводить «запретный» символ.

+0

Можете ли вы поделиться кодом с тем, что вы пробовали до сих пор? – lenz

+0

Я только что создал экземпляры и пробовал некоторые методы, но мне не удалось: D – Scriptim

+0

ну, вот так: JFormattedTextField binaryText = new JFormattedTextField(); – Scriptim

ответ

1

Вы не хотите форматировать значение, вы хотите отфильтровать содержимое. Используйте DocumentFilter на равнине на JTextField

Start, взглянув на Implementing a DocumntFilter и Examples для получения более подробной информации ...

В качестве примера, «двоичный фильтр», который будет только принимать 0 и 1

public class BinaryDocumentFilter extends DocumentFilter { 

    @Override 
    public void insertString(DocumentFilter.FilterBypass fb, int offset, 
      String text, AttributeSet attr) 
      throws BadLocationException { 
     StringBuilder buffer = new StringBuilder(text.length()); 
     for (int i = buffer.length() - 1; i >= 0; i--) { 
     char ch = buffer.charAt(i); 
     if (ch == '0' || ch == '1') { 
      buffer.append(ch); 
     } 
     } 
     super.insertString(fb, offset, buffer.toString(), attr); 
    } 

    @Override 
    public void replace(DocumentFilter.FilterBypass fb, 
      int offset, int length, String string, AttributeSet attr) throws BadLocationException { 
     if (length > 0) { 
     fb.remove(offset, length); 
     } 
     insertString(fb, offset, string, attr); 
    } 
} 

который может быть нанесен непосредственно на поле-х Document:

JTextField binaryField = new JTextField(10); 
((AbstractDocument)binaryField.getDocument()).setDocumentFilter(new BinaryDocumentFilter()); 
+0

Это приводит к ошибкам компилятора: – Scriptim

+0

на super.insertString (fb, offset, buffer.toString(), ** attr **); – Scriptim

+0

и при ** @ Override ** public void replace() {} – Scriptim

Смежные вопросы