package application; import application.colorThemes.Theme; import javafx.animation.Animation; import javafx.animation.KeyFrame; import javafx.animation.Timeline; import javafx.scene.Group; import javafx.scene.control.Skin; import javafx.scene.control.TextField; import javafx.scene.input.MouseEvent; import javafx.scene.paint.Color; import javafx.scene.shape.Line; import javafx.util.Duration; /** * Created by tareq on 7/13/15. */ public class TextInput extends TextField { private Line animationLine, baseLine; private Group g; private boolean isAnimationFinished = true; private double animationVar; Timeline sizeAnimation; public TextInput() { super(); sceneProperty().addListener((observable, oldValue, newValue) -> { if (newValue != null) { if (!getScene().getStylesheets().contains(getClass().getResource("application.css").toExternalForm())) getScene().getStylesheets().add(getClass().getResource("application.css").toExternalForm()); } }); getStyleClass().add("material-text-input"); animationLine = new Line(0, 0, 0, 0); baseLine = new Line(0, 0, 0, 0); animationLine.setVisible(false); g = new Group(baseLine, animationLine); addEventHandler(MouseEvent.MOUSE_CLICKED, e -> { if (isAnimationFinished) { sizeAnimation = new Timeline(new KeyFrame(Duration.millis(7), ev -> { animationLine.setStartX(5 + getWidth() / 2 - (animationVar)); animationLine.setEndX(getWidth() / 2 + (animationVar) - 5); animationVar += 3; isAnimationFinished = false; })); sizeAnimation.setOnFinished(ev -> { animationLine.setVisible(false); animationVar = 0; isAnimationFinished = true; }); sizeAnimation.setCycleCount((int) ((getWidth() / 2) / 3)); sizeAnimation.play(); animationLine.setVisible(true); } }); } @Override protected Skin<?> createDefaultSkin() { Skin<?> defaultSkin = super.createDefaultSkin(); getChildren().add(0, g); widthProperty().addListener(e -> { baseLine.setStartX(10); baseLine.setEndX(getWidth() - 10); }); animationLine.setStroke(Color.web(Theme.BlueGreen.ACCENT_COLOR)); animationLine.setStrokeWidth(3f); // animationLine.setStroke(Color.web(Theme.BlueGreen.ACCENT_COLOR)); return defaultSkin; } @Override protected void layoutChildren() { super.layoutChildren(); getChildren().get(0).setTranslateY(getHeight() / 2); } }