おもしろ~い
でも逆にJavaFXの中にSwingしたいな。JavaFXのGUIコンポーネントはまだ少ないからなぁ。
いろいろやってみよう
main.fx
package studyfx;
import javafx.animation.Interpolator;
import javafx.animation.Timeline;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.input.MouseEvent;
import javafx.scene.paint.Color;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
var opacity = 0.0;
def image = Image {
url: "{__DIR__}images/3415358870_1cc377423d_m.jpg"
}
var stage:Stage = Stage {
title: "Application title"
style: StageStyle.TRANSPARENT
width: image.width
height: image.height
scene: Scene {
fill: Color.TRANSPARENT
content: ImageView {
opacity: bind opacity
preserveRatio: true
image: image
onMouseDragged: function(event:MouseEvent):Void {
stage.x += event.dragX;
stage.y += event.dragY;
}
}
}
}
Timeline {
keyFrames: [
at (0s) { opacity => 0.0 },
at (0.5s) { opacity => 1.0 tween Interpolator.EASEBOTH }
]
}.play();
Main.fx
/*
* Main.fx
*
* Created on 2009/04/04, 17:16:02
*/
package javafxeyes;
import java.awt.MouseInfo;
import java.awt.Point;
import java.awt.PointerInfo;
import java.lang.Math;
import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.scene.input.MouseEvent;
import javafx.scene.paint.Color;
import javafx.scene.Scene;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Ellipse;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
var rightX:Number;
var rightY:Number;
var leftX:Number;
var leftY:Number;
var strokeWidth: Number = 10;
var eyeRadius = bind strokeWidth;
var width = 150;
var height = 100;
var stage:Stage = Stage {
title: "JavaFXeyes"
width: bind width
height: bind height
style: StageStyle.TRANSPARENT
scene: Scene {
fill: null
content: [
Ellipse {
centerX: bind width / 4
centerY: bind height / 2
radiusX: bind width / 4 - strokeWidth / 2
radiusY: bind height / 2 - strokeWidth / 2
stroke: Color.BLACK
strokeWidth: bind strokeWidth
fill: null // Color.WHITE
onMouseDragged: moveStage
},
Circle {
centerX: bind leftX
centerY: bind leftY
radius: bind eyeRadius
fill: Color.BLACK
onMouseDragged: moveStage
},
Ellipse {
centerX: bind width / 4 * 3
centerY: bind height / 2
radiusX: bind width / 4 - strokeWidth / 2
radiusY: bind height / 2 - strokeWidth / 2
stroke: Color.BLACK
strokeWidth: bind strokeWidth
fill: null // Color.WHITE
onMouseDragged: moveStage
},
Circle {
centerX: bind rightX
centerY: bind rightY
radius: bind eyeRadius
fill: Color.BLACK
onMouseDragged: moveStage
}
]
}
}
Timeline {
repeatCount: Timeline.INDEFINITE
keyFrames : [
KeyFrame {
time : 50ms
action: updateEyePosition
}
]
}.play();
function moveStage(event:MouseEvent):Void {
var x = event.dragX;
var y = event.dragY;
stage.x = stage.x + x;
stage.y = stage.y + y;
}
function calcEyePosition(x:Number, y:Number, cx:Number, cy:Number):Point {
var eyeX:Number = 0;
var eyeY:Number = 0;
var theta = Math.atan2(y - cy, x - cx);
var hr = width / 4 - strokeWidth - eyeRadius;
if(Math.abs(x - cx) > Math.abs(hr*Math.cos(theta))){
eyeX = cx + hr * Math.cos(theta);
} else {
eyeX = x;
}
var vr = height / 2 - strokeWidth - eyeRadius;
if(Math.abs(y - cy) > Math.abs(vr * Math.sin(theta))){
eyeY = height - cy - vr * Math.sin(theta);
} else {
eyeY = height - y;
}
return new Point(eyeX as Integer, eyeY as Integer);
}
function updateEyePosition():Void {
var point:PointerInfo = MouseInfo.getPointerInfo();
var x = point.getLocation().getX();
var y = point.getLocation().getY();
x = x - stage.x;
y = -y + stage.y + stage.height;
var p = calcEyePosition(x, y, width / 4, height / 2);
leftX = p.x;
leftY = p.y;
p = calcEyePosition(x, y, width / 4 * 3, height / 2);
rightX = p.x;
rightY = p.y;
}
JavaFXeyes.jnlp
<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="file:///c:/Dev/" href="JavaFXeyes.jnlp">
<information>
<title>JavaFXeyes</title>
<vendor>Study JavaFX</vendor>
<icon href="icon.png"/>
<homepage href="http://takumakei.blogspot.com/"/>
<description>JavaFXeyes is the my first JavaFX program</description>
<offline-allowed/>
<shortcut>
<desktop/>
</shortcut>
</information>
<security>
<all-permissions/>
</security>
<resources>
<j2se version="1.5+"/>
<extension name="JavaFX Runtime" href="http://dl.javafx.com/1.1/javafx-rt.jnlp"/>
<jar href="JavaFXeyes.jar" main="true"/>
</resources>
<application-desc main-class="javafxeyes.Main">
</application-desc>
</jnlp>
自己署名証明書で署名する
C:\Dev>keytool -selfcert -alias myself -keystore myKeystore
C:\Dev>keytool -list -keystore myKeystore
C:\Dev>jarsigner -keystore myKeystore JavaFXeyes.jar myself