При разработке приложения с графическим пользовательским интерфейсом (GUI) на Java с использованием Swing часто необходимо ограничить ввод пользователя определенными типами, например, принимать только числа в компоненте JTextField. В этой статье мы рассмотрим пять различных методов достижения этой функциональности, каждый со своим примером кода. К концу вы получите четкое представление о том, как заставить JTextField принимать только числовые данные в ваших Java-приложениях.
Метод 1: использование KeyListener
Один из способов проверить ввод и разрешить только числовые символы — реализовать KeyListener для JTextField. Вот пример:
textField.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
char c = e.getKeyChar();
if (!Character.isDigit(c)) {
e.consume(); // Ignore non-numeric input
}
}
});
Метод 2: использование DocumentFilter
Другой подход заключается в использовании DocumentFilter для перехвата и изменения текста, введенного в JTextField. Вот пример:
((AbstractDocument) textField.getDocument()).setDocumentFilter(new DocumentFilter() {
public void insertString(FilterBypass fb, int offset, String text, AttributeSet attr) throws BadLocationException {
StringBuilder sb = new StringBuilder();
for (char c : text.toCharArray()) {
if (Character.isDigit(c)) {
sb.append(c);
}
}
super.insertString(fb, offset, sb.toString(), attr);
}
public void replace(FilterBypass fb, int offset, int length, String text, AttributeSet attrs) throws BadLocationException {
StringBuilder sb = new StringBuilder();
for (char c : text.toCharArray()) {
if (Character.isDigit(c)) {
sb.append(c);
}
}
super.replace(fb, offset, length, sb.toString(), attrs);
}
});
Метод 3: использование InputVerifier
Класс InputVerifier можно использовать для проверки и ограничения ввода в JTextField. Вот пример:
textField.setInputVerifier(new InputVerifier() {
public boolean verify(JComponent input) {
String text = ((JTextField) input).getText();
return text.matches("\\d+"); // Accept only digits
}
});
Метод 4: использование NumberFormatter
Swing предоставляет класс NumberFormatter, который можно использовать для форматирования и проверки числового ввода. Вот пример:
NumberFormat format = NumberFormat.getInstance();
NumberFormatter formatter = new NumberFormatter(format);
formatter.setValueClass(Integer.class); // Set the value class to Integer
formatter.setMinimum(0); // Set the minimum value to 0
formatter.setMaximum(Integer.MAX_VALUE); // Set the maximum value to Integer.MAX_VALUE
JFormattedTextField textField = new JFormattedTextField(formatter);
Метод 5: использование регулярных выражений
Регулярные выражения можно использовать для проверки и ограничения ввода в JTextField. Вот пример:
textField.addKeyListener(new KeyAdapter() {
public void keyTyped(KeyEvent e) {
String text = textField.getText();
if (!text.matches("\\d*")) {
e.consume(); // Ignore non-numeric input
}
}
});
В этой статье мы рассмотрели пять различных способов заставить JTextField принимать только числа в приложении Java Swing. В зависимости от ваших конкретных требований вы можете выбрать метод, который лучше всего соответствует вашим потребностям. Независимо от того, решите ли вы использовать KeyListener, DocumentFilter, InputVerifier, NumberFormatter или регулярные выражения, эти методы помогут вам эффективно проверять и ограничивать числовой ввод.
Реализуя эти методы, вы можете улучшить взаимодействие с пользователем и гарантировать, что ваше приложение получает только действительные числовые данные, улучшая общую функциональность и удобство использования вашего графического интерфейса Java Swing.