JTextField ограничивает ввод только определенными символами - PullRequest
5 голосов
/ 05 октября 2011

Я хотел бы создать JTextField с вводимыми символами, ограниченными чем-то вроде "? AbcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVXYWZZ0123456789 + & @ # /% = ~ _- |:!.,;" поэтому я попытался переопределить

public class CustomJTextField extends JTextField {  
String goodchars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVXYWZZ0123456789+&@#/%?=~_-|!:,.;";

//... my class body ...//

@Override
public void processKeyEvent(KeyEvent ev) {
    if(c != '\b' && goodchars.indexOf(c) == -1 ) {
        ev.consume();
        return;
    }
    else 
        super.processKeyEvent(ev);}}

но это не то, что я хочу, потому что пользователь не может больше ctrl-c ctrl-v ctrl-x ... поэтому я добавил

&& ev.getKeyCode() != 17 && ev.getKeyCode() !=67 && ev.getKeyCode() != 86 && ev.getKeyCode() !=0 &&

к условию if, но теперь пользователь может вставить несоответствующий ввод, т. Е. '(' Или '<', без каких-либо проблем ... что я могу сделать? </p>

Ответы [ 2 ]

7 голосов
/ 05 октября 2011

может быть, лучше использовать DocumentFilter с Pattern ,

3 голосов
/ 05 октября 2011

Попробуйте JFormattedTextField и используйте

MaskFormatter mf = new MaskFormatter();
mf.setValidCharacters("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVXYWZZ0123456789+&@#/%?=~_-|!:,.;");
JFormattedTextField textField = new JFormattedTextField(mf);

Редактировать: Извините, это был неправильный код, вот рабочий

...