Как можно ограничить ввод символов в JTextField? - Java
Формулировка задачи:
Добрый день! Подскажите, как можно ограничить ввод символов в JTextField, чтобы вводились только цифры и ".", а остальные символы даже не выводились бы в TextField.
Решение задачи: «Как можно ограничить ввод символов в JTextField?»
textual
Листинг программы
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.swing.*;
public class Test extends JFrame {
public Test() {
final JLabel label = new JLabel();
final JTextField tf1 = new JTextField ();
JButton button = new JButton("Очистить");
getContentPane().add (tf1, BorderLayout.NORTH);
label.setForeground(Color.red);
label.setFont(new Font("Consolas",Font.PLAIN,16));
add(label,BorderLayout.SOUTH);
add(button,BorderLayout.EAST);
tf1.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
Pattern p = Pattern.compile("(([0-9]){0,}([\\.]){0,})+");
Matcher m = p.matcher(tf1.getText());
if(!m.matches()) {
tf1.setEnabled(false);
label.setText("Нажмите на кнопку \"Очистить\" Вводите только цифры и символ \".\"");
}
}
});
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
tf1.setText("");
tf1.setEnabled(true);
}
});
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setSize(640,340);
}
public static void main(String[] args) {
Frame f = new Test();
f.setVisible(true);
}
}