JAvafxは1組のガラス状園Buttonを構築する
package javafxapplication14;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
/**
* @author Administrator
*/
function actionPerformed(color:String) :Void {
println(color);
}
Stage {
title: "button"
width: 320
height:200
scene: Scene {
content: [
Rectangle {
x: 0, y: 0
width: 320, height: 200
fill: Color.web("#4f6068")
},
FXButton {
offsetX: 40
offsetY: 50
lightColor: "#fc1503"
darkColor: "#460702"
action: actionPerformed
},
FXButton {
offsetX: 100
offsetY: 50
lightColor: "#657efd"//042dfb"
darkColor: "#02124d"
action: actionPerformed
},
FXButton {
offsetX: 160
offsetY: 50
lightColor: "#27FB04"
darkColor: "#0B4402"
action: actionPerformed
},
FXButton {
offsetX: 220
offsetY: 50
lightColor: "#f4fd02"
darkColor: "#414301"
action: actionPerformed
}
]
}
}
package javafxapplication14;
import javafx.scene.CustomNode;
import javafx.scene.Group;
import javafx.scene.Node;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.effect.GaussianBlur;
import javafx.scene.paint.LinearGradient;
import javafx.scene.paint.Stop;
import javafx.scene.shape.LineTo;
import javafx.scene.shape.MoveTo;
import javafx.scene.shape.Path;
import javafx.scene.shape.VLineTo;
import javafx.scene.transform.Transform;
import javafx.scene.effect.Glow;
import javafx.animation.Interpolator;
import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.scene.input.MouseEvent;
/**
* @author Administrator
*/
// place your code here
public class FXButton extends CustomNode {
package var offsetX:Number;
package var offsetY:Number;
package var lightColor:String;
package var darkColor:String;
var glowLevel:Number = 0.0;
var glow = Glow { level: bind glowLevel };
package var action: function(:String) : Void;
override function create() : Node {
Group {
translateX: offsetX;
translateY: offsetY;
content:[
Group {
effect: bind glow
content:[
Circle {
effect: GaussianBlur { radius: 10.0 }
centerX: 18, centerY: 18
radius: 18
fill: Color.BLACK
transforms: Transform.translate(-2, -2)
},
Circle {
effect: GaussianBlur { radius: 10.0 }
centerX: 18, centerY: 18
radius: 18
fill: Color.color(1, 1, 1, 0.6)
transforms: Transform.translate(1, 1)
},
Circle {
centerX: 18, centerY: 18
radius: 18
fill:
LinearGradient {
startX : 0.0
startY : 0.0
endX : 0.0
endY : 1.0
stops: [
Stop {
color : Color.web(darkColor)
offset: 0.0
},
Stop {
color : Color.web(lightColor)
offset: 1.0
},
]
}
},
Path {
fill: Color.BLACK
stroke: Color.color(1, 1, 1, 0.4)
elements : [
MoveTo {
x : 0.0, y : 0.0
},
VLineTo {
y : 20
},
LineTo {
x : 16, y : 10
},
LineTo {
x : 0.0, y : 0.0
},
]
transforms: Transform.translate(11, 7)
},
Circle {
effect: GaussianBlur{ radius: 8.0 }
centerX: 18, centerY: 18
radius: 15
fill:
LinearGradient {
startX : 0.0
startY : 0.0
endX : 0.0
endY : 1.0
stops: [
Stop {
color : Color.WHITE
offset: 0.0
},
Stop {
color : Color.TRANSPARENT
offset: 1.0
},
]
}
},
]
onMouseEntered: function( e: MouseEvent ):Void {
fader.rate = 1;
fader.play();
}
onMouseExited: function( e: MouseEvent ):Void {
fader.rate = -1;
fader.play();
}
onMouseReleased: function( e: MouseEvent ):Void {
action("lightColor:{lightColor} darkColor:{darkColor}");
}
}
]
}
}
def fader:Timeline = Timeline {
keyFrames : [
KeyFrame {
time : 200ms
values : [
glowLevel => 0.6 tween Interpolator.LINEAR
]
}
]
};
}