All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.pcsoft.framework.jfex.controls.util.EventHandlerUtils Maven / Gradle / Ivy

The newest version!
package org.pcsoft.framework.jfex.controls.util;

import javafx.event.EventHandler;
import javafx.scene.control.Spinner;
import javafx.scene.control.TextField;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import org.pcsoft.framework.jfex.commons.util.internal.StringUtilsEx;


public final class EventHandlerUtils {

    public static final class TextFieldHandlers {
        public static EventHandler createNumericIntegerInputRestrictionHandler() {
            return createNumericIntegerInputRestrictionHandler(-1);
        }

        public static EventHandler createNumericIntegerInputRestrictionHandler(final int maxLength) {
            return event -> {
                if (event.getCode() == KeyCode.BACK_SPACE || event.getCode() == KeyCode.DELETE ||
                        event.getCode().isNavigationKey())
                    return;

                if (!event.getCharacter().matches("[\\-0-9]+")) {
                    event.consume();
                } else {
                    final TextField source = (TextField) event.getSource();

                    if (maxLength >= 0 && source.getText() != null && source.getText().length() >= maxLength) {
                        event.consume();
                    } else {
                        try {
                            final String value = StringUtilsEx.insert(source.getText(), event.getCharacter(), source.getCaretPosition());
                            Integer.parseInt(value);
                        } catch (NumberFormatException ignore) {
                            event.consume();
                        }
                    }
                }
            };
        }

        public static EventHandler createNumericDecimalInputRestrictionHandler() {
            return createNumericIntegerInputRestrictionHandler(-1);
        }

        public static EventHandler createNumericDecimalInputRestrictionHandler(final int maxLength) {
            return event -> {
                if (event.getCode() == KeyCode.BACK_SPACE || event.getCode() == KeyCode.DELETE ||
                        event.getCode().isNavigationKey())
                    return;

                if (!event.getCharacter().matches("[\\-0-9\\.,]+")) {
                    event.consume();
                } else {
                    final TextField source = (TextField) event.getSource();

                    if (maxLength >= 0 && source.getText() != null && source.getText().length() >= maxLength) {
                        event.consume();
                    } else {
                        try {
                            final String value = StringUtilsEx.insert(source.getText(), event.getCharacter(), source.getCaretPosition());
                            Double.parseDouble(value);
                        } catch (NumberFormatException ignore) {
                            event.consume();
                        }
                    }
                }
            };
        }

        public static EventHandler createLengthInputRestrictionHandler(final int maxLength) {
            return event -> {
                if (event.getCode() == KeyCode.BACK_SPACE || event.getCode() == KeyCode.DELETE ||
                        event.getCode().isNavigationKey())
                    return;

                if (((TextField) event.getSource()).getText().length() >= maxLength) {
                    event.consume();
                }
            };
        }

        public static EventHandler createHexInputRestrictionHandler() {
            return createHexInputRestrictionHandler(-1);
        }

        public static EventHandler createHexInputRestrictionHandler(final int byteLength) {
            return event -> {
                if (event.getCode() == KeyCode.BACK_SPACE || event.getCode() == KeyCode.DELETE ||
                        event.getCode().isNavigationKey())
                    return;

                if (!event.getCharacter().matches("[0-9a-fA-F]+")) {
                    event.consume();
                } else if (((TextField) event.getSource()).getText() != null && byteLength >= 0 && ((TextField) event.getSource()).getText().length() >= byteLength * 2) {
                    event.consume();
                }
            };
        }

        public static EventHandler createOIDInputRestrictionHandler() {
            return event -> {
                if (event.getCode() == KeyCode.BACK_SPACE || event.getCode() == KeyCode.DELETE ||
                        event.getCode().isNavigationKey())
                    return;

                if (!event.getCharacter().matches("[0-9\\.]+")) {
                    event.consume();
                }
            };
        }

        private TextFieldHandlers() {
        }
    }

    public static final class SpinnerHandlers {
        public static EventHandler createNumericIntegerInputRestrictionHandler() {
            return createNumericIntegerInputRestrictionHandler(-1);
        }

        public static EventHandler createNumericIntegerInputRestrictionHandler(final int maxLength) {
            return event -> {
                if (event.getCode() == KeyCode.BACK_SPACE || event.getCode() == KeyCode.DELETE ||
                        event.getCode().isNavigationKey())
                    return;

                if (!event.getCharacter().matches("[\\-0-9]+")) {
                    event.consume();
                } else if (maxLength >= 0 && ((Spinner) event.getSource()).getEditor().getText() != null && ((Spinner) event.getSource()).getEditor().getText().length() >= maxLength) {
                    event.consume();
                } else {
                    try {
                        final Spinner source = (Spinner) event.getSource();

                        final String value = StringUtilsEx.insert(source.getEditor().getText(), event.getCharacter(), source.getEditor().getCaretPosition());
                        Integer.parseInt(value);
                    } catch (NumberFormatException ignore) {
                        event.consume();
                    }
                }
            };
        }

        public static EventHandler createNumericDecimalInputRestrictionHandler() {
            return createNumericIntegerInputRestrictionHandler(-1);
        }

        public static EventHandler createNumericDecimalInputRestrictionHandler(final int maxLength) {
            return event -> {
                if (event.getCode() == KeyCode.BACK_SPACE || event.getCode() == KeyCode.DELETE ||
                        event.getCode().isNavigationKey())
                    return;

                if (!event.getCharacter().matches("[\\-0-9\\.,]+")) {
                    event.consume();
                } else if (maxLength >= 0 && ((Spinner) event.getSource()).getEditor().getText() != null && ((Spinner) event.getSource()).getEditor().getText().length() >= maxLength) {
                    event.consume();
                } else {
                    try {
                        final Spinner source = (Spinner) event.getSource();

                        final String value = StringUtilsEx.insert(source.getEditor().getText(), event.getCharacter(), source.getEditor().getCaretPosition());
                        Double.parseDouble(value);
                    } catch (NumberFormatException ignore) {
                        event.consume();
                    }
                }
            };
        }

        private SpinnerHandlers() {
        }
    }

    private EventHandlerUtils() {
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy