/
evernotenkai
/
DataBaseXJavaProject
Обзор
Документация
Войти
/
evernotenkai
/
DataBaseXJavaProject
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/app/ui/components/NumericField.java
85 строк
3 KB
Makson4ik
Весь проект с src db и прочим делом
12 май 2026, 22:43
12 май 2026, 22:43
431f4aa
Код
Авторство
О чём код?
package app.ui.components; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.scene.control.TextField; /** * Простое числовое поле без спиннера. * Разрешает только цифры и проверяет границы при чтении значения. */ public class NumericField extends TextField { private final int min; private final int max; public NumericField(int min, int max) { this.min = min; this.max = max; getStyleClass().add("numeric-field"); installFilter(); } private void installFilter() { textProperty().addListener(new ChangeListener<String>() { @Override public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) { if (newValue == null) { return; } String filtered = newValue.replaceAll("[^0-9]", ""); if (!filtered.equals(newValue)) { int caret = getCaretPosition(); setText(filtered); positionCaret(Math.min(filtered.length(), caret)); } } }); focusedProperty().addListener(new ChangeListener<Boolean>() { @Override public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) { if (Boolean.FALSE.equals(newValue)) { clampCurrentValue(); } } }); } private void clampCurrentValue() { String raw = getText(); if (raw == null || raw.trim().isEmpty()) { return; } try { int value = Integer.parseInt(raw.trim()); int clamped = Math.max(min, Math.min(max, value)); String normalized = String.valueOf(clamped); if (!normalized.equals(raw.trim())) { setText(normalized); } } catch (NumberFormatException ex) { setText(""); } } public Integer getIntValue() { String raw = getText(); if (raw == null || raw.trim().isEmpty()) { return null; } int value = Integer.parseInt(raw.trim()); if (value < min || value > max) { throw new IllegalArgumentException("Значение должно быть в диапазоне от " + min + " до " + max + "."); } return Integer.valueOf(value); } public void setIntValue(Integer value) { if (value == null) { clear(); return; } int clamped = Math.max(min, Math.min(max, value.intValue())); setText(String.valueOf(clamped)); } }