/* * Copyright (C) Gleidson Neves da Silveira * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.gn.global.util; import javafx.application.Platform; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.event.EventHandler; import javafx.scene.control.Spinner; import javafx.scene.control.TextField; import javafx.scene.input.KeyEvent; import java.util.Locale; import java.util.concurrent.atomic.AtomicInteger; /** * @author Gleidson Neves da Silveira | [email protected] * Create on 24/11/2018 * Version 1.0 */ public class Mask { public static void noSpaces(TextField field){ field.lengthProperty().addListener(new ChangeListener<Number>() { @Override public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) { if (field.getText() != null) { if (field.getText().length() > 0) { String value = field.getText(); value = value.replaceFirst("[ ]", ""); field.setText(value); } } } }); } public static void maxField(TextField field, int length) { field.textProperty().addListener((observableValue, oldValue, newValue) -> { if (newValue == null || newValue.length() > length) { field.setText(oldValue); } }); } public static void noInitSpace(TextField field) { field.lengthProperty().addListener((observable, oldValue, newValue) -> { if (field.getText() != null) { if (field.getText().length() > 0) { String value = field.getText(); value = value.replaceFirst("[^a-zA-Z ][~´]", ""); value = value.replaceAll("^ ", ""); field.setText(value); } } }); } public static void noSymbols(final TextField field) { ChangeListener listener = (ChangeListener<Number>) (observable, oldValue, newValue) -> { if (field.getText() != null) { if (field.getText().length() > 0) { String value = field.getText(); value = value.replaceAll("[^a-zA-Z0-9 ]", ""); field.setText(value); } } }; field.lengthProperty().addListener(listener); } public static void noSymbols(final TextField field, String exceptions) { ChangeListener listener = (ChangeListener<Number>) (observable, oldValue, newValue) -> { if (field.getText() != null) { if (field.getText().length() > 0) { String value = field.getText(); value = value.replaceAll("[^a-zA-Z0-9 " + exceptions + "]", ""); field.setText(value); } } }; field.lengthProperty().addListener(listener); } public static void nameField(final TextField field) { field.focusedProperty().addListener((observable, oldValue, newValue) -> { if(!newValue){ String text = field.getText(); String[] parts = text.split(" "); StringBuilder sb = new StringBuilder(); for (String word : parts) { if (word.length() > 2) { word = word.substring(0, 1).toUpperCase() + word.substring(1); } sb.append(" ").append(word); } field.setText(sb.toString().replaceFirst(" ", "")); field.positionCaret(field.getText().length()); } }); } public static boolean isEmail(TextField field) { // KeyPressed boolean is = false; if (!field.getText().isEmpty()) { if (field.getText().contains("@") && field.getText().contains(".") && !field.getText().contains(" ")) { String user = field.getText().substring(0, field.getText().lastIndexOf('@')); String domain = field.getText().substring(field.getText().lastIndexOf('@') + 1, field.getText().length()); String subdomain = field.getText().substring(field.getText().indexOf(".") + 1, field.getText().length()); if ((user.length() >= 1) && (!user.contains("@")) && (domain.contains(".")) && (!domain.contains("@")) && (domain.indexOf(".") >= 1) && (domain.lastIndexOf(".") < domain.length() - 1) && subdomain.length() >= 2) { is = true; } } } return is; } public static void emailField(TextField field){ field.lengthProperty().addListener((observable, oldValue, newValue) -> { if (field.getText() != null) { if (field.getText().length() > 0) { String value = field.getText(); value = value.replaceAll("[^a-zA-Z0-9@.]", ""); field.setText(value); } } }); } public static void noLetters(final TextField textField) { textField.lengthProperty().addListener((observable, oldValue, newValue) -> { if (textField.getText() != null) { if (textField.getText().length() > 0) { String value = textField.getText(); value = value.replaceAll("[a-zA-Zç]", ""); textField.setText(value); } } }); } public static void monetaryField(final TextField field, Locale locale) { AtomicInteger position = new AtomicInteger(1); if (locale.toString().equals("pt_BR")) { field.lengthProperty().addListener((observable, oldValue, newValue) -> Platform.runLater(() -> { String value = field.getText(); value = value.replaceAll("[^0-9]", ""); value = value.replaceAll("([0-9])([0-9]{14})$", "$1.$2"); value = value.replaceAll("([0-9])([0-9]{11})$", "$1.$2"); value = value.replaceAll("([0-9])([0-9]{8})$", "$1.$2"); value = value.replaceAll("([0-9])([0-9]{5})$", "$1.$2"); value = value.replaceAll("([0-9])([0-9]{2})$", "$1,$2"); field.setText(value); field.positionCaret(position.getAndIncrement()); })); } else { field.lengthProperty().addListener((observable, oldValue, newValue) -> Platform.runLater(() -> { String value = field.getText(); value = value.replaceAll("[^0-9]", ""); value = value.replaceAll("([0-9])([0-9]{14})$", "$1,$2"); value = value.replaceAll("([0-9])([0-9]{11})$", "$1,$2"); value = value.replaceAll("([0-9])([0-9]{8})$", "$1,$2"); value = value.replaceAll("([0-9])([0-9]{5})$", "$1,$2"); value = value.replaceAll("([0-9])([0-9]{2})$", "$1.$2"); field.setText(value); field.positionCaret(position.getAndIncrement()); })); } field.addEventFilter(KeyEvent.KEY_PRESSED, event -> { switch (event.getCode()) { case BACK_SPACE: field.positionCaret(position.decrementAndGet()); break; } }); } }