package de.uniluebeck.mi.projmi6.view; import javafx.animation.FadeTransition; import javafx.animation.Timeline; import javafx.animation.Transition; import javafx.beans.binding.Bindings; import javafx.beans.property.SimpleIntegerProperty; import javafx.geometry.Pos; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.layout.StackPane; import javafx.scene.paint.Color; import javafx.util.Duration; /** * Created by Johannes on 21/11/2015. */ public class MessageIcon extends Button { private ImageView imageView; private Label messageCountLabel; private final SimpleIntegerProperty messageCount = new SimpleIntegerProperty(this, "messageCount", 0); FadeTransition transition; public MessageIcon(){ imageView = new ImageView(new Image("message.png")); imageView.setFitHeight(30); imageView.setFitWidth(30); /* imageView.opacityProperty().bind(Bindings.createDoubleBinding( ()->messageCount.get()>0? 1.0 : 0.5, messageCount));*/ messageCountLabel = new Label(); messageCountLabel.textProperty().bind(messageCount.asString()); StackPane.setAlignment(messageCountLabel, Pos.BOTTOM_RIGHT); messageCountLabel.setTextFill(Color.BLACK); this.disableProperty().bind(messageCount.lessThanOrEqualTo(0)); StackPane graphic = new StackPane(imageView, messageCountLabel); this.setGraphic(graphic); initTransition(); } private void initTransition(){ transition = new FadeTransition(Duration.millis(500), imageView); transition.setFromValue(0.5); transition.setToValue(1.0); transition.setCycleCount(Timeline.INDEFINITE); transition.setAutoReverse(true); messageCount.addListener((observable, oldValue, newValue) -> { if(messageCount.get()>0){ transition.play(); }else{ transition.stop(); } }); } public int getMessageCount() { return messageCount.get(); } public SimpleIntegerProperty messageCountProperty() { return messageCount; } public void setMessageCount(int messageCount) { this.messageCount.set(messageCount); } }