/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER * * Copyright © 2010, Oracle and/or its affiliates. All rights reserved. * Oracle is a registered trademark of Oracle Corporation and/or its affiliates. * Oracle and Java are registered trademarks of Oracle and/or its affiliates. * Other names may be trademarks of their respective owners. * * This file is available and licensed under the following license: * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright notice, trademark notice, this list of conditions, and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, trademark notice, this list of conditions, and the following disclaimer in the documentation and/or other materials provided with the distribution. * * Neither the name of Oracle nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. */ import javafx.stage.Stage; import javafx.scene.Scene; import javafx.scene.paint.LinearGradient; import javafx.scene.paint.Stop; import javafx.scene.paint.Color; import javafx.scene.Group; import javafx.scene.shape.Circle; import javafx.scene.effect.DropShadow; import javafx.scene.shape.Path; import javafx.scene.shape.MoveTo; import javafx.scene.shape.LineTo; import javafx.scene.paint.RadialGradient; import javafx.scene.shape.Rectangle; import javafx.scene.effect.Lighting; import javafx.scene.effect.Glow; import javafx.scene.effect.light.DistantLight; import javafx.scene.Cursor; import javafx.scene.input.MouseButton; import javafx.animation.Timeline; import javafx.scene.shape.DelegateShape; import javafx.scene.shape.Shape; var effect = Glow{}; Stage { title: "FXButton" width: 170 height: 170 scene: Scene { fill: LinearGradient { startX: 0, startY: 0, endX: 1, endY: 1, proportional: true stops: [ Stop { offset: 0.0 color: Color.WHITE}, Stop { offset: 1.0 color: Color.GRAY} ] } var start: Boolean = true; var startingShape = Path{ fill: Color.BLACK elements: [ MoveTo {x: 63 y: 53 }, LineTo {x: 63 y: 84}, LineTo {x: 83 y: 68 }, LineTo {x: 63 y:53} ] effect: Lighting{ light: DistantLight{ azimuth: 90 } } } var endingShape = Path{ fill: Color.BLACK elements: [ MoveTo { x: 57 y: 53 }, LineTo { x: 66 y: 53}, LineTo { x: 66 y: 83 }, LineTo {x: 57 y:83 }, LineTo { x: 57 y: 53 }, MoveTo { x: 73 y: 53 }, LineTo { x: 82 y: 53}, LineTo { x: 82 y: 83 }, LineTo {x: 73 y:83 }, LineTo { x: 73 y: 53 }, ] effect: Lighting{ light: DistantLight{ azimuth: 90 } } } var currentShape: Shape = startingShape; var animation = Timeline{ keyFrames: [ at (0s) {currentShape => startingShape}, at (1ms) {currentShape => endingShape}, ] }; var delegate = DelegateShape { shape: bind currentShape } content: [ Group{ cursor: Cursor.HAND effect: effect content: [ Circle { centerX: 70 centerY: 70 radius: 40 fill:LinearGradient { startX:0 startY:0 endX:1 endY:1 stops: [ Stop { offset:0 color: Color.web("#0099CC") }, Stop { offset:1 color: Color.web("#000099") } ] } effect: DropShadow{ offsetX:5 offsetY:5 color: Color.BLACK } }, Circle { centerX: 70 centerY: 70 radius: 34 fill: bind RadialGradient { centerX:0.5 centerY:0.5 radius:0.5 stops: [ Stop { offset:0 color: Color.web("#0099CC",0) }, Stop { offset:1 color: Color.web("#0099CC",1.0) } ] } effect: DropShadow{ offsetX:2 offsetY:2 color: Color.BLACK } }, delegate, ] onMouseEntered: function(event) { effect.level = 0.65; } onMouseClicked: function(event) { if(event.button == MouseButton.PRIMARY) { if (start){ animation.rate = 1.0; animation.play(); start = false } else { animation.rate = -1.0; animation.play(); start = true } } } onMousePressed: function(event) { if(event.button == MouseButton.PRIMARY) { effect.level = 0.0; } } onMouseReleased: function(event) { effect.level = 0.65; } onMouseExited: function(event) { effect.level = 0.3; } }//Group ]//Content }//Scene }//Stage