2008年12月24日水曜日

JavaFX FX (lang)

public static java.lang.Object getArgument(java.lang.String name)

現在のJavaFX Script program の incoming argument を返す。特に name/value 対の incoming argument applets の環境をチェックするのに使える。
たいていは String が返ってくるが、ある環境では他の値が返ってくる可能性がある。
String 形式の数字を受け入れる (e.g. getArgument("0"))。引数の名前の argument がない場合は null を返す。

getArgument("javafx.applet") はブラウザ内で JavaFX script application を走らせるためのapplet を返す。

次のように使える

var applet = FX.getArgument("javafx.applet") as java.applet.Applet;
var inBrowser = "true".equals(FX.getArgument("isApplet") as String);

一度この applet が得られると、次の4つの使い方がある。

to invoke AppletContext's showDocument() method(s)
to invoke AppletContext's showStatus() method
to retrieve the JSObject to interact with JavaScript in the page
to retrieve the DOM object using bootstrapping mechanism in the new plugin

applet として走っていない場合、 getArgument("javafx.applet") は null を返す

More...

富士通イルミネーション

富士通で敷地内のイルミネーションを一般公開していた。
サントリーのプレミアムモルツ(黒)やワイン、ジュースを無料で配ってた 。
らっきー。

2008年12月23日火曜日

ちきちき 焼き鳥

近所にある「ちきちき」という焼き鳥屋に行ってきました。
値段がリーズナブルだし、おいしいし、とてもよかったです。

つくねが大きくてびっくり。


生ビールも290円なり。

JavaFX Stage (scene)

Stage の Style を変える

・default
style : StageStyle.DECORATED


import javafx.stage.Stage
import javafx.stage.StageStyle

Stage {
title: "Application title"
width: 250
height: 80
scene: Scene {
content: Text {
font : Font { size : 24 }
x: 10, y: 30
content: "Application content"
}
}
style: StageStyle.DECORATED
}





・透明な背景 & 縁なし
style : StageStyle.TRANSPARENT





・白い背景 & 縁なし
style : StageStyle.UNDECORATED

2008年12月21日日曜日

エコプロダクツ2008

13日(土)、エコプロダクツ2008 に行ってきました。
2時間半しか時間がなかったので、半分はじっくりみれませんでした。
残念。来年は平日に行けたらいいな。

場所は東京ビックサイト


電気自動車。メーカーは忘れた。


LED のライトがいろんなメーカーのブースにあった。来年はこれがはやりかな。


SHARP


ソーラーパネルのはやりみたい。





これは屋上緑化の展示


なんの展示か忘れた


SANYO のエネループ電動自転車


バイオマスの展示。木材のチップとプラスチックの原料を7:3ぐらいでまぜたバイオプラスチックの展示。








電気自動車


藍染の展示。アンケートに答えたら、ストラップをくれた。


木のおもちゃとか。時間が無くてあんまり見れなかった。


TOTOのブース


食洗機いいなー。


電気ゴルフカート


SUBARUの電気自動車





かわいい


パルシステムの牛(こんせんくん)





More...

2008年12月20日土曜日

JavaFX Example

More...

import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.shape.Rectangle;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;

Stage {
title: "Declaring Is Easy!"
width: 249
height: 251
visible: true
scene: Scene {
content: [
Circle {
centerX: 118
centerY: 110
radius: 83
fill: Color.WHITE
stroke: Color.RED
},
Rectangle {
x: 45 y: 35
width: 150 height: 150
arcWidth: 15 arcHeight: 15
fill: Color.GREEN
}
]
}
}



More...

import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.Group;
import javafx.scene.shape.Circle;
import javafx.scene.paint.Color;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.text.Text;
import javafx.scene.transform.Transform;

Stage {
title: "Nodes"
width: 220
height: 170
visible: true
scene: Scene {
fill: Color.LIGHTBLUE
content: Group {
translateX: 55
translateY: 10
content: [
Circle {
centerX: 50 centerY: 50 radius: 50
stroke: Color.YELLOW
fill: Color.WHITE
},
Text {
transforms: Transform.rotate(33, 10, 100)
content: "Duke"
},
ImageView {
image: Image {url: "http://java.sun.com/docs/books/tutorial/uiswing/examples/components/TextSamplerDemoProject/src/components/images/dukeWaveRed.gif"}
}
]
}
}
}



More...

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.Rectangle;
import javafx.scene.shape.Circle;
import javafx.scene.effect.Reflection;

Stage {
title: "JavaFX Record Button"
width: 249
height: 251
visible: true
scene: Scene {
fill: LinearGradient {
startX: 0, startY: 0, endX: 0, endY: 1.0, proportional: true
stops: [
Stop {offset: 0.0 color: Color.WHITE},
Stop {offset: 1.0 color: Color.BLACK}
]
}
content: [
Group{
content: [
Rectangle {
x: 40 y: 55 width: 150 height: 50
arcWidth: 20 arcHeight: 55 stroke: Color.BLACK
fill: LinearGradient {
startX: 0.0
startY: 0.0
endX: 0.0
endY: 1.0
proportional: true
stops: [
Stop {offset: 0.0 color: Color.WHITE},
Stop {offset: 1.0 color: Color.BLACK}
]
}
},
Circle {
centerX: 115 centerY: 80 radius: 15
fill: Color.web("#ff3300") stroke: Color.DARKRED
}
]
effect: Reflection {fraction: 0.9 topOpacity: 0.5 topOffset: 2.5}
}
]
}
}



More...

import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.ext.swing.SwingSlider;

import javafx.scene.shape.Circle;
import javafx.scene.paint.Color;
import javafx.scene.paint.Stop;
import javafx.scene.paint.RadialGradient;

var slider = SwingSlider{
minimum: 0
maximum: 60
value: 0
translateX: 10
translateY: 110
};

Stage {
title: "Data Binding"
width: 220
height: 170
scene: Scene {
fill: Color.LIGHTGRAY;
content: [
slider,
Circle {
centerX: bind slider.value+50 centerY: 60 radius: 50
stroke: Color.YELLOW
fill: RadialGradient {
centerX: 50 centerY: 60 radius: 50
focusX: 50 focusY: 30
proportional: false
stops: [
Stop {offset: 0 color: Color.RED},
Stop {offset: 1 color: Color.WHITE},
]
}
}
]
}
visible: true
}



More...

import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.ext.swing.SwingToggleGroup;
import javafx.ext.swing.SwingRadioButton;
import javafx.scene.shape.Circle;
import javafx.scene.paint.Color;
import javafx.scene.paint.RadialGradient;
import javafx.scene.paint.Stop;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.text.Font;

var group = SwingToggleGroup{};

var choice1 = SwingRadioButton{
text: "STOP"
foreground: Color.GRAY
font: Font{name:"Tahoma" size: 15}
toggleGroup: group
};

var choice2 = SwingRadioButton{
text: "READY"
foreground: Color.GRAY
font: Font{name:"Tahoma" size: 15}
toggleGroup: group
};

var choice3 = SwingRadioButton{
text: "GO"
foreground: Color.GRAY
font: Font{name:"Tahoma" size: 15}
toggleGroup: group
};

var lightStop = Circle {
centerX: 12
centerY: 12
radius: 12
stroke: Color.GRAY
fill: bind RadialGradient {
centerX: 8,
centerY: 8,
radius: 12,
proportional: false
stops: [
Stop {offset: 0.0 color: Color.WHITE}
Stop {offset: 1.0 color:
if (choice1.selected)
then Color.RED
else Color.GREY
}
]
}
};

var lightReady = Circle {
centerX: 12
centerY: 12
radius: 12
stroke: Color.GRAY
fill: bind RadialGradient {
centerX: 8,
centerY: 8,
radius: 12,
proportional: false
stops: [
Stop {offset: 0.0 color: Color.WHITE}, Stop {offset: 1.0 color:
if (choice2.selected)
then Color.GOLD
else Color.GRAY
}
]
}
};

var lightGo = Circle {
centerX: 12
centerY: 12
radius: 12
stroke: Color.GRAY
fill: bind RadialGradient {
centerX: 8,
centerY: 8,
radius: 12,
proportional: false
stops: [
Stop {offset: 0.0 color: Color.WHITE},
Stop {offset: 1.0 color:
if (choice3.selected)
then Color.GREEN
else Color.GREY
}
]
}
};

Stage {
title: "Lights"
width: 220
height: 130
visible: true
scene: Scene{
fill: Color.HONEYDEW
content: HBox{
spacing: 10
content:[
VBox{
spacing: 10
content:[choice1, choice2, choice3]
},
HBox{
spacing: 15
content:[lightStop, lightReady, lightGo]
translateY: 25
}
]
}//HBox
} //Scene
}//Stage



More...

import javafx.animation.Interpolator;
import javafx.animation.Timeline;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.shape.ArcTo;
import javafx.scene.shape.MoveTo;
import javafx.scene.shape.Path;
import javafx.scene.effect.Lighting;
import javafx.scene.effect.light.DistantLight;

var x: Number;

Timeline {
repeatCount: Timeline.INDEFINITE
autoReverse: true
keyFrames: [
at (0s) {x => 0.0},
at (7s) {x => 387.0 tween Interpolator.LINEAR},
]
}.play();

var y: Number;

Timeline {
repeatCount: Timeline.INDEFINITE
autoReverse: true
keyFrames: [
at (0s) {y => 0.0},
at (4s) {y => 55.0 tween Interpolator.LINEAR},
]
}.play();

Stage{
title: "Cloud"
visible: true
scene: Scene{
fill: Color.WHITE
content:[
ImageView{
image: Image{url: "http://java.sun.com/docs/books/tutorial/2d/basic2d/examples/images/weather-sun.png"}
},
Path {
translateX: bind x
translateY: bind y
fill: Color.WHITE
stroke: Color.LIGHTBLUE
strokeWidth: 2
effect: Lighting{light: DistantLight{azimuth: 90}}
elements: [
MoveTo { x: 15 y: 15 },
ArcTo { x: 50 y: 10 radiusX: 20 radiusY: 20 sweepFlag: true},
ArcTo { x: 70 y: 20 radiusX: 20 radiusY: 20 sweepFlag: true},
ArcTo { x: 50 y: 60 radiusX: 20 radiusY: 20 sweepFlag: true},
ArcTo { x: 20 y: 50 radiusX: 10 radiusY: 5 sweepFlag: true},
ArcTo { x: 15 y: 15 radiusX: 10 radiusY: 10 sweepFlag: true},
]
}//Path
]
}//Scene
onClose: function() {
java.lang.System.exit(0);
}//close action
}//Stage



More...

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.MouseEvent;
import javafx.scene.input.MouseButton;

var effect = Glow{};
var visiblePlay: Boolean = true;
var visiblePause: Boolean = false;
var play: Boolean = false;

Stage {
title: "FXButton"
width: 170 height: 170
visible: true
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}
]
}
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
}
},
Path{
visible: bind visiblePlay;
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}}
},
Rectangle {
visible: bind visiblePause;
x: 57 y: 53 width: 9 height: 30
stroke: Color.BLACK fill: Color.BLACK
effect: Lighting{ light: DistantLight{azimuth: 90}}
},
Rectangle {
visible: bind visiblePause;
x: 73 y: 53 width: 9 height: 30
stroke: Color.BLACK fill: Color.BLACK
effect: Lighting{ light: DistantLight{azimuth: 90}}
},
]

onMouseEntered: function(evt: MouseEvent):Void {
effect.level = 0.65;
}

onMouseClicked: function(evt: MouseEvent):Void {
if(evt.button == MouseButton.PRIMARY) {
if(play == true){
visiblePlay = true;
visiblePause = false;
play = false
}
else{
visiblePlay = false;
visiblePause = true;
play = true;
}
}
}

onMousePressed: function(evt: MouseEvent):Void {
if(evt.button == MouseButton.PRIMARY) {
effect.level = 0.0;
}
}

onMouseReleased: function(evt: MouseEvent):Void {
effect.level = 0.65;
}

onMouseExited: function(evt: MouseEvent):Void {
effect.level = 0.3;
}
},
]
}
}

JavaFX Cursor (scene.Cursor)

Cursor カーソル

Circle{
centerX: 30
centerY: 40
radius: 20
fill: Color.RED
opacity: 0.8
cursor: Cursor.HAND
};

/**
Cursor.CROSSHAIR
Cursor.DEFAULT
Cursor.E_RESIZE
Cursor.H_RESIZE
Cursor.MOVE
Cursor.N_RESIZE
Cursor.NE_RESIZE
Cursor.NONE
Cursor.NW_RESIZE
Cursor.S_RESIZE
Cursor.SE_RESIZE
Cursor.SW_RESIZE
Cursor.TEXT
Cursor.V_RESIZE
Cursor.W_RESIZE
Cursor.WAIT
*/

JavaFX Perspective Transformation (scene.transform)

Perspective Transform 遠近変形

ImageView{
image: Image {
url: "{__dir__}image.gif"
}
effect: PerspectiveTransform {
ulx: 60
uly: 0
urx: 100
ury: 0
lrx: 100
lry: 115
llx: 30
lly: 100
}
}

JavaFX Scaling (scene.transform)

Scaling 拡大/縮小

Circle {
centerX: 20
centerY: 20
radius:20
fill: Color.RED
transforms: Transform.scale(2, 2);
}

JavaFX ShearTransformation (scene.transform)

Shear Transformation 引きのばし

ImageView{
transforms: Transform.shear(2, 1);
image: Image {
url: "{__dir__}image.gif"
}
}

JavaFX Translate (scene.transform)

Translate 移動

Text{
content:"Step by step"
transforms: Transform.translate(15, 30);
}

JavaFX Rotation (scene.transform)

Rotate 回転

ImageView{
image: Image{
url: "{__dir__}image.gif"
}
transforms: Rotate {
angle: 60
pivotX: 40
pivotY: 400
}
};

JavaFX Color Adjust (scene.effect)

Color Adjust 色調整

var brightness = ImageView{
image: Image{"{__dir__}image.gif"}
effect: ColorAdjust{brightness: -0.2}
};

var contrast = ImageView{
image: Image{"{__dir__}image.gif"}
effect: ColorAdjust{contrast: 2}
};

var hue = ImageView{
image: Image{"{__dir__}image.gif"}
effect: ColorAdjust{hue: 1.0}
};

var saturation = ImageView{
image: Image{"{__dir__}image.gif"}
effect: ColorAdjust{saturation: 0.5}
};

JavaFX Sepia Tone (scene.effect)

Sepia Tone セピア

var sepia = ImageView{
image: Image{"{__dir__}image.gif"}
effect: SepiaTone {level: 0.8}
};

JavaFX Glow (scene.effect)

Glow 輝き

var glow = ImageView{
image: Image {"{__dir__}image.gif"}
effect: Glow {level: 1 }
};

JavaFX Reflection (scene.effect)

Reflection 反射


var reflection = Text {
x: 10
y: 42
content: "Reflection"
fill: Color.SEAGREEN
font: Font{ size: 20 name: "Verdana"}
effect: Reflection {
fraction: 0.9
topOpacity: 0.9
topOffset: 0.1
}
};

JavaFX Blur (scene.effect)

ぼかし

GaussianBlur

var blur1 = Rectangle{
x: 5
y: 25
width: 100
height: 50
fill: RadialGradient{
centerX: 55
centerY: 50
radius: 10
proportional: false
cycleMethod: CycleMethod.REFLECT
stops: [
Stop{offset: 0.3 color: Color.DARKGREEN},
Stop{offset: 1.0 color: Color.WHITE}
]
}
effect: GaussianBlur{radius: 5 }
};


MotionBlur

var blur2 = Rectangle{
x: 5
y: 25
width: 100
height: 50
fill: RadialGradient{
centerX: 55
centerY: 50
radius: 10
proportional: false
cycleMethod: CycleMethod.REFLECT
stops: [
Stop{offset: 0.3 color: Color.DARKGREEN},
Stop{offset: 1.0 color: Color.WHITE}
]
}
effect: MotionBlur{
angle: 45
input: InnerShadow {
offsetX: 4
offsetY: 4
radius: 6
color: Color.YELLOW
}
radius: 10
}
};

JavaFX Lighting (scene.effect)

離れた位置からのライティング

90度方向から

var lighting1 = Group{
content:[
Circle{
centerX: 30
centerY: 20
radius: 20
fill: Color.RED
opacity: 0.9
}
]
effect: Lighting{
light: DistantLight{azimuth: 90}}
};


270度方向から

var lighting2 = Group{
content:[
Circle{
centerX: 30
centerY: 20
radius:20
fill: Color.RED
opacity: 0.9
}
]
effect: Lighting{
light: DistantLight{azimuth: 270}}
};


1点からライティング

var lighting3 = Group{
content:[
Circle{
centerX: 30
centerY: 20
radius: 20
fill: Color.RED
opacity: 0.9
}
]
effect: Lighting{
light: PointLight{x: 20 y: 30 z: 50}}
};


スポットライト

var lighting4 = Group{
content:[
Circle{
centerX: 30
centerY: 20
radius: 20
fill: Color.RED
opacity: 0.9
}
]
effect: Lighting{
light: SpotLight {
x: 0
y: 10
z: 10
pointsAtX: 20
pointsAtY: 20
pointsAtZ: 0
specularExponent: 2
}
}
};

JavaFX Shadow (scene.effect)

外側の影

var shadow1 = Group{
content:[
Circle{
centerX: 30
centerY: 40
radius: 20
fill: Color.RED
opacity: 0.8
cursor: Cursor.HAND
},
Line {
startX: 20
startY: 30
endX: 40
endY: 50
stroke: Color.WHITE
strokeWidth: 2
}
]
effect: DropShadow{
offsetX: 5
offsetY: 5
color: Color.BLACK
}
};


内側の影

var shadow2 = Group{
content:[
Circle{
centerX: 50
centerY: 40
radius: 20
fill: Color.RED
opacity: 0.8
},
Line {
startX: 40
startY: 30
endX: 60
endY: 50
stroke: Color.WHITE
strokeWidth: 2
}
]
effect: InnerShadow{
offsetX: 5
offsetY: 5
color: Color.BLACK
}
};


内側&外側の影

var shadow3 = Group {
content:[
Circle{
centerX: 40
centerY: 40
radius: 20
fill: Color.RED
opacity: 0.8
effect: DropShadow {
offsetX: 5
offsetY: 5
color: Color.BLACK
}
},
Line {
startX: 30
startY: 30
endX: 50
endY: 50
stroke: Color.WHITE
strokeWidth: 2
}
]
effect: InnerShadow{
offsetX: 5
offsetY: 5
color: Color.BLACK
}
};


左右の外側の影

var shadow4 = Group{
content:[
Circle{
centerX: 30
centerY: 40
radius: 20
fill: Color.RED
opacity: 0.8
},
Line {
startX: 20
startY: 30
endX: 40
endY: 50
stroke: Color.WHITE
strokeWidth: 2
}
]
effect: Blend {
topInput: DropShadow {
offsetX: 4
offsetY: 4
radius: 6
color: Color.DARKBLUE
}
bottomInput: DropShadow {
offsetX: -4
offsetY: 4
radius: 6
color: Color.DARKMAGENTA
}
}
};

JavaFX Compositions (scene)

2つの図形の組合せ

そのまま Original Shapes

Group{
content:[
Rectangle {
fill: null
x: 80
y: 120
width: 100
height: 50
stroke: Color.RED
},
Ellipse {
fill: null
centerX: 110
centerY: 150
radiusX: 50
radiusY: 25
stroke: Color.RED
}
]
}


2つの図形の AND をとる Intersection

ShapeIntersect {
fill: fill
a: Rectangle {
x: 80
y: 120
width: 100
height: 50 }
b: Ellipse {
centerX: 110
centerY: 150
radiusX: 50
radiusY: 25}
}


2つの図形の差をとる Subtraction

ShapeSubtract {
fill: fill
a: Rectangle {
x: 80
y: 120
width: 100
height: 50 }
b: Ellipse {
centerX: 110
centerY: 150
radiusX: 50
radiusY: 25}
}

2008年12月19日金曜日

JavaFX Line Join Styles (scene)

線の接続の形

丸く接続

Path {
stroke: Color.DARKSLATEGRAY
strokeWidth: 10.0
strokeLineJoin: StrokeLineJoin.BEVEL
elements: [
MoveTo { x: 20 y: 100},
LineTo { x: 60 y: 120},
LineTo { x:100 y: 100}
]
}


四角く接続

Path {
stroke: Color.DARKSLATEGRAY
strokeWidth: 10.0
strokeLineJoin: StrokeLineJoin.MITER
elements: [
MoveTo { x: 20 y: 100},
LineTo { x: 60 y: 120},
LineTo { x:100 y: 100}
]
}


ちょっと丸く接続

Path {
stroke: Color.DARKSLATEGRAY
strokeWidth: 10.0
strokeLineJoin: StrokeLineJoin.ROUND
elements: [
MoveTo { x: 20 y: 100},
LineTo { x: 60 y: 120},
LineTo { x:100 y: 100}
]
}

JavaFX Line Cap Styles (scene)

線の終端の形

丸い形

Line {
startX: 20
startY: 120
endX: 60
endY: 120
stroke: Color.DARKSLATEGRAY
strokeWidth: 10.0
strokeLineCap: StrokeLineCap.ROUND
}


四角い形

Line {
startX: 20
startY: 120
endX: 60
endY: 120
stroke: Color.DARKSLATEGRAY
strokeWidth: 10.0
strokeLineCap: StrokeLineCap.SQUARE
}

JavaFX FillStyle (scene)

1色で塗りつぶし

Rectangle {
x: 20
y: 60
width: 60
height: 50
stroke: Color.DARKSLATEGRAY
fill: Color.CADETBLUE
}


線形グラデーション Liner Gradients

Rectangle {
x: 20
y: 60
width: 60
height: 50
stroke: Color.DARKSLATEGRAY
fill: LinearGradient {
startX: 0.0
startY: 0.0
endX: 1.0
endY: 0.0
proportional: true
stops: [
Stop { offset: 0.0 color: Color.CADETBLUE },
Stop { offset: 1.0 color: Color.GOLD}
]
}
}

Rectangle {
x: 20
y: 60
width: 60
height: 50
stroke: Color.DARKSLATEGRAY
fill: LinearGradient {
startX: 0.0
startY: 0.0
endX: 220.0
endY: 0.0
proportional: false
stops: [
Stop { offset: 0.0 color: fill },
Stop { offset: 1.0 color: alterfill}
]
}
}


放射状グラデーション Radial Gradients

Rectangle {
x: 20
y: 60
width: 60
height: 50
stroke: Color.DARKSLATEGRAY
fill: RadialGradient {
centerX: 30
centerY: 70
radius: 30
proportional: false
stops: [
Stop {offset: 0.0 color: Color.WHITE},
Stop {offset: 0.5 color: Color.YELLOW},
Stop {offset: 1.0 color: Color.GOLD}
]
}
}

Rectangle {
x: 20
y: 60
width: 60
height: 50
stroke: Color.DARKSLATEGRAY
fill: RadialGradient {
centerX: 30
centerY: 70
radius: 30
proportional: false
cycleMethod: CycleMethod.REFLECT
stops: [
Stop {offset: 0.0 color: Color.WHITE},
Stop {offset: 0.5 color: Color.YELLOW},
Stop {offset: 1.0 color: Color.GOLD}
]
}
}

Rectangle {
x: 20
y: 60
width: 60
height: 50
stroke: Color.DARKSLATEGRAY
fill: RadialGradient {
centerX: 30
centerY: 70
radius: 30
proportional: false
cycleMethod: CycleMethod.REPEAT
stops: [
Stop {offset: 0.0 color: Color.WHITE},
Stop {offset: 0.5 color: Color.YELLOW},
Stop {offset: 1.0 color: Color.GOLD}
]
}
}

2008年12月18日木曜日

Google Maps JavaScript API Example

Google Map を張り付けてみましたー

The World Factbook

いろんな国の情報が載っている
国旗とか、地図とか、人口とか。。。

CIA The World Factbook

slideshare

面白いから私もいれてみたー

More...

XML その5

XQueryにはXPath表現以外に、FLWOR(フラワー)表現と呼ばれる構文が用意されている。FLWOR式はRDBの問い合わせ言語であるSQLのSELECT文に相当し、XML文書からデータを取得し、その結果をXML形式で返却する。

FLWOR式は、「for節」「let節」「where節」「order by節」「return節」で構成される。
最初に「for節」または「let節」を記述し、必要に応じて複数回の「for節」や「let節」、1回の「where節」、1回の「order by節」を記述する。
最後に「return節」を記述し、最終的な結果を返却する。

「for節」
 構文 : for $変数名 in 式
 機能 : 「式」(XPath式など)を評価し、「式」が返す結果の各々のノードを「$変数名」にバインドし、最終的にノードの数だけreturn節を実行する。

「let節」
 構文 : let $変数名 := 式
 機能 : 「式」(XPath式など)を評価し、「式」が返す結果をまるごと「$変数名」にバインドする。

「where節」
 構文 : where 式 [(and | or) 式 ・・・]
 機能 : where節より前で宣言された変数に対して「式」を記述し、式がfalseとなるノードを除外する。

「order by節」
 構文 : order by 式 (ascending | descending)
 機能 : 「式」に記述された値を使用して、検索結果の並び替えを行う。

「return節」
 構文 : return 式
 機能 : 「式」を評価し、その結果を返却する。

※ 「for節」と「let節」の違いは、「式」が返す結果が複数ノードである場合、「for節」の場合はノードを1つずつ変数にバインドするのに対し、「let節」の場合は「式」が返す結果のすべてを変数にバインドする。

※ 「order by節」、「where節」はSQLのSELECT文で使用する「order by」「where」と同等の機能がある。

下記のtest.xmlから「製品コード」属性の値が"S0001"である「製品」要素を取得するためのFLWOR式と実行結果

【test.xml】
<製品情報>
<製品 製品コード="S0001" 製造工場="大分工場">
<製品名>フェルトペンW</製品名>
<価格>50</価格>
<発売日>2009-03-01</発売日>
</製品>
<製品 製品コード="S0002" 製造工場="神奈川工場">
<製品名>赤鉛筆</製品名>
<価格>10</価格>
<発売日>2008-08-25</発売日>
</製品>
</製品情報>

【FLWOR式】
for $prd in fn:doc("test.xml")/製品情報/製品
where $prd/@製品コード = "S0001"
return $prd

【実行結果】
<製品 製品コード="S0001" 製造工場="大分工場">
<製品名>フェルトペンW</製品名>
<価格>50</価格>
<発売日>2009-03-01</発売日>
</製品>

値が50より小さい「価格」要素を取得するためのFLWOR式と実行結果

【FLWOR式】
for $prd in fn:doc("test.xml")/製品情報/製品
let $prc := $prd/価格 where $prc < 50
return $prc

【実行結果】
<価格>10</価格>

XML その4

XML文書を検索する

XQueryは、XML文書を検索しデータを抽出するためのXML問い合せ言語である。2007年にW3C(World Wide Web Consortium)が勧告している。 XQuery1.0はXPath2.0を機能拡張しており、XPath2.0で記述されたXPath式はXQuery1.0として実行することができる。

※ 1つの入れ子になったグループをノードという

XPath式は単純に、XML文書内の特定の要素や属性などのノードの位置までを、「/」記号で区切りながら記述する。示されたXPath式に該当するノードが複数の場合は、複数の該当ノードが選択される。

XPathによる主なノードの指定方法

ノードの種類 ノードの指定方法
文書ノード 先頭の「/」
要素ノード 要素名
属性ノード @属性名

※ 文書ノードとはXML文書全体を表すノードで、「ルート要素」とは異なる。 「ルート要素」は文書ノードの子ノードになる。

簡単なクエリであれば、XPath式だけで表現するが可能。

【test.xml】
<製品情報>
<製品 製品コード="S0001" 製造工場="大分工場">
<製品名>フェルトペンW</製品名>
<価格>50</価格>
<発売日>2009-03-01</発売日>
</製品>
<製品 製品コード="S0002" 製造工場="神奈川工場">
<製品名>赤鉛筆</製品名>
<価格>10</価格>
<発売日>2008-08-25</発売日>
</製品> </製品情報>

【XPath式】
fn:doc("test.xml")/製品情報/製品

※ fn:doc関数は特定のXML文書の文書ノードを取得するために提供されている、XQuery/XPathの標準関数。

【実行結果】
<製品 製品コード="S0001" 製造工場="大分工場">
<製品名>フェルトペンW</製品名>
<価格>50</価格>
<発売日>2009-03-01</発売日>
</製品>
<製品 製品コード="S0002" 製造工場="神奈川工場">
<製品名>赤鉛筆</製品名>
<価格>10</価格>
<発売日>2008-08-25</発売日>
</製品>

XPath式が選択するノードをさらに絞り込むための記述を「述部」という。「述部」は絞り込みを行うノードの後に「[絞り込の条件]」のように記述する。
XPathでは
比較演算子 =, !=
論理演算子 and, or
などの演算子を使用することが可能。

「製品コード」属性の値が"S0001"である「製品」要素を取得するためのXPath式

【XPath式】
fn:doc("test.xml")/製品情報/製品[@製品コード='S0001']

【実行結果】
<製品 製品コード="S0001" 製造工場="大分工場">
<製品名>フェルトペンW</製品名>
<価格>50</価格>
<発売日>2009-03-01</発売日>
</製品>

XML その3

・XMLでの命名規則

XMLの要素や属性などの名前に使用できる文字
名前の1文字目 
使える文字  半角英字、漢字、ひらがな、全角カタカナ、"_" など
使えない文字 半角数字、"."、"-"、全角英数字、半角カタカナなど

名前の2文字目以降 
使える文字  1文字目で使える文字、半角数字、"."、"-" など 
使えない文字 全角英数字、半角カタカナなど

大文字、小文字の区別を問わず「XML」の文字列は予約されているので、名前の最初に使うことはできない。

【正しい名前の記述例】
 <Product>赤鉛筆</Product>
 <フリガナ>ヤマダタロウ</フリガナ>

【誤った名前の記述例】
 <1.Product>赤鉛筆</1.Product>
 <フリガナ>ヤマダタロウ</フリガナ>


・特殊文字


XMLでは、タグの開始を表す「<」記号と参照を表す「&」記号を、要素の内容や属性値に直接記述することができない。これらの記号を文字データとして要素の内容や属性値に記述するには、定義済み実体参照や文字参照、CDATAセクションを使用する。

定義済み実体参照

定義済み実体参照とは、「<」記号や「&」記号、シングルクォーテーションやダブルクォーテーションなどの記号を置き換えて記述するための表記方法で、以下のものが定義されている。

文字データとして 置き換えの表記方法
記述したい文字
< &lt;
> &gt;
& &amp;
" &quot;
' &apos;

【定義済み実体参照の例】
「XML文書」
 <式>A&lt;B</式>

「式要素の文字データ」
 A<B


文字参照

文字参照とは、「<」記号や「&」記号や、その他のキーボードから直接入力できないような文字などを含め、それら任意の文字を文字データとして記述するために、その文字の文字コード(ISO/IEC 10646の文字コード位置)を直接入力する表記方法である。

構文
  &# 10進数で表した文字コード ;
  &#x 16進数で表した文字コード ;

【文字参照の例】
「XML文書」
 <式>A&#60;B</式>
 <式>C&#x003c;D</式>

「それぞれの式要素の文字データ」
 A<B
 C<D

XML その2

XMLのルール(XML1.0で規定されている文法)
・ 開始タグと終了タグが対になっている
・ 1つのXML文書には、ルート要素が1つだけ存在する
・ 要素が正しい入れ子構造になっている
などがある。

・ 開始タグと終了タグが対になっている

開始タグに指定した同じ要素名を終了タグに記述しなければならない。
また、要素名にアルファベットを使用する場合、大文字と小文字を区別する。

【正しい記述例】
 <製品名>赤鉛筆</製品名>
 <ProductName>赤鉛筆</ProductName>

【誤った記述例】
 <製品名>赤鉛筆</製品名称>
 <productname>赤鉛筆</ProductName>


・ 1つのXML文書には、ルート要素が1つだけ存在する


最上位にある要素のことをルート要素(文書要素)と呼ぶ。1つのXML文書にルート要素が1つだけ存在しなければならない。ルート要素以外のすべての要素はルート要素の子孫要素となる。

<製品情報>
<製品 製品コード="S0001" 製造工場="大分工場">
<製品名>フェルトペンW</製品名>
<価格>50</価格>
<発売日>2009-03-01</発売日>
</製品>
<製品 製品コード="S0002" 製造工場="神奈川工場">
<製品名>赤鉛筆</製品名>
<価格>10</価格>
<発売日>2008-08-25</発売日>
</製品>
</製品情報>

「製品情報」要素がルート要素であり、「製品」、「製品名」、「価格」、「発売日」要素は「製品情報」要素の子孫要素になる。

・ 要素が正しい入れ子構造になっている

XMLでは要素の内容(開始タグと終了タグの間)に要素を記述することができ、要素の内容として記述された要素のことを「子要素」と呼ぶ。要素と子要素の構成は、正しい入れ子構造になければならない。タグの組み合わせが交差するような記述はXMLの文法に違反していることになる。

【正しい入れ子構造の例】
<製品>
<製品名>フェルトペンW</製品名><価格>50</価格>
</製品>

【誤った入れ子構造の例】
<製品>
<製品名>フェルトペンW<価格></製品名>50</価格>
</製品>

「開始タグと終了タグが対になっている」、「1つのXML文書には、ルート要素が1つだけ存在する」、「要素が正しい入れ子構造になっている」などの文法に従って記述されているXML文書のことを「整形式XML文書(Well-formed XML Document)」と呼ぶ。

【整形式XML文書の例】
<製品情報>
<製品 製品コード="S0001" 製造工場="大分工場">
<製品名>フェルトペンW</製品名>
<価格>50</価格>
<発売日>2009-03-01</発売日>
</製品>
<製品 製品コード="S0002" 製造工場="神奈川工場">
<製品名>赤鉛筆</製品名>
<価格>10</価格>
<発売日>2008-08-25</発売日>
</製品>
</製品情報>

XML その1

XML(Extensible Markup Language)とはテキスト形式で記述される拡張可能なマークアップ言語である。1998年にW3C(World Wide Web Consortium)によって策定された。

XMLでは、開始タグと終了タグを使ってデータをマークアップする。

<name>redpencil</name>
 ↑      ↑
 開始タグ  終了タグ

マークアップされた開始タグから終了タグまでを「要素」と言う。

例)

<productinfo>
<product code="S0001" factory="Ooita">
<name>penW</name>
<price>50</price>
<date>2009-03-01</date>
</product>
<product code="S0002" factory="Kanagawa">
<name>redpencil</name>
<cost>10</cost>
<date>2008-08-25</date>
</product>
</productinfo>

このようにマークアップを行うことで「penW」というデータは製品名であり、「50」というデータは価格であるということが人間にもシステムにも理解できるようになる。 XMLのルールに従って記述された文書のことをXML文書と言う。XML文書はテキストデータのため、利用するアプリケーション、OS、プラットフォームに依存しない。テキストファイルとして記述できるという意味ではcsv形式などのいくつかの形式でも実現できるが、csv形式と較べるとXML文書は読みやすく、高機能で、データを階層構造で保持でき、項目(要素)の追加や削除を柔軟に行うことができる。
スタイルシートを適用することにより、HTMLなどの様々なフォーマットに変換して利用できるので、XML形式でデータを保持することで再利用性を高めることが可能。

JavaFX Color (scene)

standard name 一覧はこちら
More...

var colors = [
"ALICEBLUE",
"ANTIQUEWHITE",
"AQUA",
"AQUAMARINE",
"AZURE",
"BEIGE",
"BISQUE",
"BLACK",
"BLANCHEDALMOND",
"BLUE",
"BLUEVIOLET",
"BROWN",
"BURLYWOOD",
"CADETBLUE",
"CHARTREUSE",
"CHOCOLATE",
"CORAL",
"CORNFLOWERBLUE",
"CORNSILK",
"CRIMSON",
"CYAN",
"DARKBLUE",
"DARKCYAN",
"DARKGOLDENROD",
"DARKGRAY",
"DARKGREEN",
"DARKGREY",
"DARKKHAKI",
"DARKMAGENTA",
"DARKOLIVEGREEN",
"DARKORANGE",
"DARKORCHID",
"DARKRED",
"DARKSALMON",
"DARKSEAGREEN",
"DARKSLATEBLUE",
"DARKSLATEGRAY",
"DARKSLATEGREY",
"DARKTURQUOISE",
"DARKVIOLET",
"DEEPPINK",
"DEEPSKYBLUE",
"DIMGRAY",
"DIMGREY",
"DODGERBLUE",
"FIREBRICK",
"FLORALWHITE",
"FORESTGREEN",
"FUCHSIA",
"GAINSBORO",
"GHOSTWHITE",
"GOLD",
"GOLDENROD",
"GRAY",
"GREEN",
"GREENYELLOW",
"GREY",
"HONEYDEW",
"HOTPINK",
"INDIANRED",
"INDIGO",
"IVORY",
"KHAKI",
"LAVENDER",
"LAVENDERBLUSH",
"LAWNGREEN",
"LEMONCHIFFON",
"LIGHTBLUE",
"LIGHTCORAL",
"LIGHTCYAN",
"LIGHTGOLDENRODYELLOW",
"LIGHTGRAY",
"LIGHTGREEN",
"LIGHTGREY",
"LIGHTPINK",
"LIGHTSALMON",
"LIGHTSEAGREEN",
"LIGHTSKYBLUE",
"LIGHTSLATEGRAY",
"LIGHTSLATEGREY",
"LIGHTSTEELBLUE",
"LIGHTYELLOW",
"LIME",
"LIMEGREEN",
"LINEN",
"MAGENTA",
"MAROON",
"MEDIUMAQUAMARINE",
"MEDIUMBLUE",
"MEDIUMORCHID",
"MEDIUMPURPLE",
"MEDIUMSEAGREEN",
"MEDIUMSLATEBLUE",
"MEDIUMSPRINGGREEN",
"MEDIUMTURQUOISE",
"MEDIUMVIOLETRED",
"MIDNIGHTBLUE",
"MINTCREAM",
"MISTYROSE",
"MOCCASIN",
"NAVAJOWHITE",
"NAVY",
"OLDLACE",
"OLIVE",
"OLIVEDRAB",
"ORANGE",
"ORANGERED",
"ORCHID",
"PALEGOLDENROD",
"PALEGREEN",
"PALETURQUOISE",
"PALEVIOLETRED",
"PAPAYAWHIP",
"PEACHPUFF",
"PERU",
"PINK",
"PLUM",
"POWDERBLUE",
"PURPLE",
"RED",
"ROSYBROWN",
"ROYALBLUE",
"SADDLEBROWN",
"SALMON",
"SANDYBROWN",
"SEAGREEN",
"SEASHELL",
"SIENNA",
"SILVER",
"SKYBLUE",
"SLATEBLUE",
"SLATEGRAY",
"SLATEGREY",
"SNOW",
"SPRINGGREEN",
"STEELBLUE",
"TAN",
"TEAL",
"THISTLE",
"TOMATO",
"TURQUOISE",
"VIOLET",
"WHEAT",
"WHITE",
"WHITESMOKE",
"YELLOW",
"YELLOWGREEN"];




import javafx.scene.paint.Color;

// standard name
var c = Color.RED

// standard constructor
var c = Color { red: 0 green: 0 blue: 1.0 };

//use 0->1.0 values. implicit alpha of 1.0
var c = Color.color(0,0,1.0);
var c = Color.color(0,0,1.0,1.0);

// RGB
//use 0->255 integers, implict alpha of 1.0
var c = Color.rgb(0,0,255);
var c = Color.rgb(0,0,255,1.0);

// HSB
//hue = 270, saturation & value = 1.0. inplict alpha of 1.0
var c = Color.hsb(270,1.0,1.0);
var c = Color.hsb(270,1.0,1.0,1.0);

// web Color
// blue as a hex web value, explict alpha
var c = Color.web("0x0000FF",1.0);
var c = Color.web("0x0000FF");
var c = Color.web("#0000FF",1.0);
var c = Color.web("#0000FF");
var c = Color.web("0000FF",1.0);
var c = Color.web("0000FF");

//convert from an AWT color
var c = Color.fromAWTColor(java.awt.Color.BLUE };

2008年12月17日水曜日

JavaFX MouseEvent (scene)


import javafx.scene.input.MouseEvent;

onMouseEntered:
function(e: MouseEvent):Void {
s = "Color.{colors[21 * v + h]}";
}
onMouseExited:
function(e: MouseEvent): Void {
s = " ";
}

JavaFX Shape (scene)

ARC 弧

import javafx.scene.shape.*;

var arc = ARC {
centerX: 30
centerY: 50
radiusX: 25,
radiusY: 25,
startAngle: 45
length: 270
type: ArcType.ROUND
stroke: Color.DARKSLATEGRAY
fill: null
};

Path 経路

var path = Path {
stroke: Color.DARKSLATEGRAY
elements: [
MoveTo {
x: 100
y: 30
},
ArcTo {
x: 150
y: 50
radiusX: 40
radiusY: 20
},
LineTo{
x: 100
y: 30
}
]
};

Circle 円

var circle = Circle {
centerX: 0
centerY: 50
radius: 20
stroke: Color.DARKSLATEGRAY
fill: null
};

Cubic Curve Cubic曲線

var cubiccurve = CubicCurve {
startX: 80
startY: 50
controlX1: 105
controlY1: 0
controlX2: 155
controlY2: 100
endX: 200
endY: 50
stroke: Color.DARKSLATEGRAY
fill: null
};

Ellipse 楕円

var ellipse = Ellipse {
centerX: 140
centerY: 50
radiusX: 50
radiusY: 25
stroke: Color.DARKSLATEGRAY
fill: null
};

Line 直線

var line = Line {
startX: 100
startY: 30
endX: 140
endY: 70
stroke: Color.DARKSLATEGRAY
};

Polygon 多角形

var polygon = Polygon {
fill: null
stroke: Color.DARKSLATEGRAY
points: [
20.0,30.0,
80.0,50.0,
70.0,70.0
]
};

Polyline 折れ曲がり直線

var polyline = Polyline {
fill: null
stroke: Color.DARKSLATEGRAY
points: [
50.0,30.0,
70.0,40.0,
60.0, 60.0,
90.0, 50.0
]
};

QuadCurve Quad曲線

var quadcurve = QuadCurve {
fill: null
startX: 80.0
startY: 50.0
endX: 120.0
endY: 50.0
controlX: 110.0
controlY: 15.0
stroke: Color.DARKSLATEGRAY
};

Rectangle 四角

var rectangle = Rectangle {
fill: null
x: 110
y: 20
width: 100
height: 50
arcWidth: 20
arcHeight: 20
stroke: Color.DARKSLATEGRAY
};

SVGPath

var svgpath = SVGPath {
content:"M20,30 L40,50 L60,30 L80,55 L100,30"
fill: null
stroke: Color.DARKSLATEGRAY
translateX: 110
};


JavaFX Text, Font (scene)


import javafx.scene.text.Text;
import javafx.scene.text.Font;

var string = "Hello!";

Text{
y: 15
content: string}

Text{
y: 15
content: string
font: Font{size: 20}}

Text{
y: 15
content: string
font: Font{oblique: true}}

Text{
y: 15
content: string
font: Font{embolden: true name:"Times New Roman"}}

Text{
y: 15
content: string
fill: Color.GREEN
stroke: Color.RED
font: Font{name:"Verdana"}}

Text{
y: 15
content: string
smooth: false
font: Font{size: 20}}

Text{
y: 10
content: string
translateX: 0
translateY: 10
rotate: 180}

JavaFX UI Elements の配置

横配置には HBox、縦配置には VBox を使う

button1,button2,button3 を横に並べる

HBox{
translateX: 10
translateY: 10
spacing: 20
content:[button1,button2,button3]
}

translateX, translateY は HBox のゼロ点をずらす
spacing は各コンテンツの間隔
content は並べるコンテンツの Sequence

button1,button2,button3 を縦に並べる

VBox{
translateX: 10
translateY: 10
spacing: 20
content:[button1,button2,button3]
}

Stage で使うとこんな感じ
More...

import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;

Stage {
title: "Components"
width: 430
height: 300
visible: true
scene: Scene{
fill: Color.CORNSILK
content: VBox{
translateX: 10
translateY: 10
spacing: 20
content:[
HBox{
spacing: 50
content:[combobox, checkbox]
},
HBox{
spacing: 10
content:[
scrollpane,
VBox{
spacing: 50
content:[
VBox{
spacing: bind slider.value
content:[
radioButton1,
radioButton2,
radioButton3]
},
textField]
},
VBox{content:[
button1,
button2,
button3]
}
]
},
HBox {
spacing: 20
content:[label, slider]
}
]
} //VBox
}//Scene
}//Stage

JavaFX TextField (Swing)


import javafx.ext.swing.SwingTextField;

//A text field
var textField = SwingTextField{
columns: 10
foreground: bind radioButton2.foreground
background: Color.YELLOW
};

JavaFX Slider (Swing)


import javafx.ext.swing.SwingSlider;

//A slider
var slider = SwingSlider{
minimum: 5
maximum: 20
value: 2
width: 245
};

JavaFX RadioButton (Swing)


import javafx.ext.swing.SwingToggleGroup;
import javafx.ext.swing.SwingRadioButton;

//A toggle group to switch between radio buttons
var toggleGroup = SwingToggleGroup{};

//Radio buttons
var radioButton1 = SwingRadioButton{
text: "Green"
foreground: Color.SEAGREEN
toggleGroup: toggleGroup
};
var radioButton2 = SwingRadioButton{
text: "Red"
foreground: Color.RED
toggleGroup: toggleGroup
};
var radioButton3 = SwingRadioButton{
text: "Blue"
foreground: Color.BLUE
toggleGroup: toggleGroup
};

JavaFX ScrollPane (Swing)


import javafx.ext.swing.SwingScrollPane;
import javafx.ext.swing.SwingList;
import javafx.ext.swing.SwingListItem;

//A list with three items
var scrollpane = SwingScrollPane{
height: 165
scrollable: true
view:
SwingList{items:[
SwingListItem{text:"Blend"},
SwingListItem{text:"Bloom"},
SwingListItem{text:"Color Adjust"},
SwingListItem{text:"Drop Shadow"},
SwingListItem{text:"Inner Shadow"},
SwingListItem{text:"Glow"},
SwingListItem{text:"Motion Blur"},
SwingListItem{text:"Gaussian Blur"},
SwingListItem{text:"Sepia Tone"},
SwingListItem{text:"Shadow"},
SwingListItem{text:"Flood"},
SwingListItem{text:"Lighting"},
SwingListItem{text:"Reflection"},
]}
};

JavaFX Label (Swing)


import javafx.ext.swing.SwingLabel;

//A label
var label = SwingLabel{text: "Resize"};

JavaFX ComboBox (Swing)


import javafx.ext.swing.SwingComboBox;
import javafx.ext.swing.SwingComboBoxItem;

//A combo box with two items
var combobox = SwingComboBox{
width: 200
items:[
SwingComboBoxItem{ text: "Radial Gradient" },
SwingComboBoxItem{ text: "Linear Gradient" },
SwingComboBoxItem{ text: "Solid Color"}
]
selectedIndex: 0
};

JavaFX CheckBox (Swing)


import javafx.ext.swing.SwingCheckBox;

//A check box
var checkbox = SwingCheckBox{text: "Apply effect"};

年賀状

日本郵便のホームページから
年賀状デザインキット
をダウンロードしてみました。

ちょっと使ってみたけど、かわいいテンプレートがたくさんあっていいね。

2008年12月16日火曜日

JavaFX Button (Swing)


import javafx.ext.swing.SwingButton;
import javafx.ext.swing.SwingIcon;
import javafx.scene.image.Image;

var button1 = SwingButton {
text: "Press Me"
icon: SwingIcon{
image: Image {
url: "http://java.sun.com/docs/books/tutorial/images/DukeWave.gif"
}
}
}

Read More!

More...
ここの間に つづきを書くのだ!

2008年12月14日日曜日

JavaFX Access Modifiers

Default Access

var x;
var x : String;
var x = z + 22;
var x = bind f(q);

この場合、変数はスクリプト内からのみ 初期化、上書き、参照、代入、束縛ができる。他の source files からは参照やアクセスはできない


The package Access Modifier

変数や関数やクラスを、同じパッケージ内の他のコードからアクセスできるようにするには、package access modifier を使う

package var x;

この access modifier を package 宣言を混同しないように注意する!

Example:

// Inside file tutorial/one.fx

// places this script in the "tutorial" package
package tutorial;

// this is the "package" access modifier
package var message = "Hello from one.fx!";
package function printMessage() {
println("{message} (in function printMessage)");
}

// Inside file tutorial/two.fx
package tutorial;
println(one.message);
one.printMessage();

この例を tutorial の上のディレクトリでコンパイルする

javafxc tutorial/one.fx tutorial/two.fx
javafx tutorial/two

The output is:

Hello from one.fx!
Hello from one.fx! (in function printMessage)



The protected Access Modifier

protected access modifier は変数や関数を、同じパッケージの他のコードや、他のパッケージ内のサブクラスからアクセスできるようにする

Example:

// Inside file tutorial/one.fx
package tutorial;
public class one {
protected var message = "Hello!";
}

// Inside file two.fx
import tutorial.one;
class two extends one {
function printMessage() {
println("Class two says {message}");
}
};

var t = two{};
t.printMessage();

コンパイルする

javafxc tutorial/one.fx two.fx
javafx two

The output is:

Class two says Hello!

ただし、このprotected access modifier は class に付けることはできない
class one に public がついているのはそのため


The public Access Modifier

public なクラス、変数、関数は、どのパッケージ内のどのクラス、スクリプトからもアクセスできる

Example:

// Inside file tutorial/one.fx
package tutorial;
public def someMessage = "This is a public script variable, in one.fx";
public class one {
public var message = "Hello from class one!";
public function printMessage() {
println("{message} (in function printMessage)");
}
}

// Inside file two.fx
import tutorial.one;
println(one.someMessage);
var o = one{};
println(o.message);
o.printMessage();

コンパイルする

javafxc tutorial/one.fx two.fx
javafx two

Output:

This is a public script variable, in one.fx
Hello from class one!
Hello from class one! (in function printMessage)


The public-read Access Modifier
public-read access modifier は 変数を次のように定義する
変数は public のように参照することができるが、同じスクリプト内からのみ書き込める
この書き込み権限を広げるには、package or protected modifier を付ける

例)package public-read, protected public-read
こうすると、write access に package or protected level が設定される

Example:

// Inside file tutorial/one.fx
package tutorial;
public-read var x = 1;

// Inside tutorial/two.fx
package tutorial;
println(one.x);

コンパイルする
 
javafxc tutorial/one.fx tutorial/two.fx
javafx tutorial/two

tutorial/one.fx の x は外部から読めるので、出力は "1" になる

次に、x の値を変更しようとしてみる

// Inside tutorial/two.fx
package tutorial;
one.x = 2;
println(one.x);

これはコンパイルエラーになる

tutorial/two.fx:3: x has script only (default) write access in tutorial.one
one.x = 2;
^
1 error

x の値を変更するには、x の write access を広げなければならない

// Inside file tutorial/one.fx
package tutorial;
package public-read var x = 1;

// Inside tutorial/two.fx
package tutorial;
one.x = 2;
println(one.x);

これをコンパイルして走らせると、出力は "2" になる


The public-init Access Modifier

public-init access modifier は変数を次のように定義する
変数は どのパッケージの object literals によって public に初期化できる
しかし、次の write access は public-read と同じマナーでコントロールされる
(default は script-level の write access だが、package か protected で access を広げることができる)
この変数の値はどのパッケージからでも読める

Example:

// Inside file tutorial/one.fx
package tutorial;
public class one {
public-init var message;
}

// Inside file two.fx
import tutorial.one;
var o = one {
message: "Initialized this variable from a different package!"
}
println(o.message);

コンパイルする

javafxc tutorial/one.fx two.fx
javafx two

Output :

Initialized this variable from a different package!

異なるパッケージ内の object literal が message variable を初期化できる
しかし、次の write access は script-only であるので、値を変えられない
よって次のコードはコンパイルエラーになる

// Inside file two.fx
import tutorial.one;
var o = one {
message: "Initialized this variable from a different package!"
}
o.message = "Changing the message..."; // WON'T COMPILE
println(o.message);

コンパイルエラーになる

two.fx:12: message has script only (default) write access in tutorial.one
o.message = "Changing the message..."; // WON'T COMPILE
^
1 error

JavaFX Packages

Step 1: Choose a Package Name
package の名前を決める
例) addressbook

Step 2: Create the Directory
package の名前のディレクトリを作る
ここには .fx ファイルやクラスが入る
例) /home/demo/addressbook

Step 3: Add the Package Declaration
package のディレクトリに移動し、source file を作る
例) /home/demo/addressbook に移動
Address.fx を作成

package addressbook;

class Address {
var street: String;
var city: String;
var state: String;
var zip: String;
}

package addressbook; でパッケージを宣言

Step 4: Add the Access Modifiers
Access Modifiers を追加する
例) public を追加

package addressbook;

public class Address {
public var street: String;
public var city: String;
public var state: String;
public var zip: String;
}

public は5つの access modifiers の1つで、詳しい説明や、他の access modifiers については次回
ここでは、public は他の class や script からこのコードをアクセスできるようにする

Step 5: Compile the Source
パッケージのディレクトリでコンパイルする
コンパイルに成功すると class が作られる
例) javafxc Address.fx
  Address.class が作られる

Step 6: Use the Class
1つ上のディレクトリに移動し、作成したクラスを使うコードを書く
例) /home/demo に移動
  addressbook package を使用したコード packagetest.fx を作成する

// Approach #1

addressbook.Address {
street: "1 Main Street";
city: "Santa Clara";
state: "CA";
zip: "95050";
}

この方法は特定のクラス(addressbook.Address)を指定して object を作成するが、ちょっと扱いにくい
特に large script では次の方法がよい

// Approach #2
import addressbook.Address;

Address {
street: "1 Main Street";
city: "Santa Clara";
state: "CA";
zip: "95050";
}

import で使用している class を明記することで、わかりやすくなる

2008年12月13日土曜日

JavaFX Classes

The Customer Example

def customer = Customer {
firstName: "John";
lastName: "Doe";
phoneNum: "(408) 555-1212"
address: Address {
street: "1 Main Street";
city: "Santa Clara";
state: "CA";
zip: "95050";
}
}

customer.printName();
customer.printPhoneNum();
customer.printAddress();

class Address {
var street: String;
var city: String;
var state: String;
var zip: String;
}

class Customer {
var firstName: String;
var lastName: String;
var phoneNum: String;
var address: Address;

function printName() {
println("Name: {firstName} {lastName}");
}

function printPhoneNum(){
println("Phone: {phoneNum}");
}

function printAddress(){
println("Street: {address.street}");
println("City: {address.city}");
println("State: {address.state}");
println("Zip: {address.zip}");
}
}



Inheriting from Other Class
他のクラスを継承する

abstract class Account {

var accountNum: Integer;
var balance: Number;

function getBalance(): Number {
return balance;
}

function deposit(amount: Number): Void {
balance += amount;
}

function withdraw(amount: Number): Void {
balance -= amount;
}
}

ここの abstract は、Account objects は直接作成できないことを意味している
Account を継承したクラスは次のようになる

class SavingsAccount extends Account {

var minBalance = 100.00;
var penalty = 5.00;

function checkMinBalance() : Void {
if(balance < minBalance){
balance -= penalty;
}
}
}

この場合、Account の変数と関数はそのまま保持されて、新たに minBalance と penalty 変数と checkMinBalance 関数が追加されている

Account の関数を上書きするには override を使う

class CheckingAccount extends Account {

var hasOverDraftProtection: Boolean;

override function withdraw(amount: Number) : Void {
if(balance-amount<0 and hasOverDraftProtection){

// code to borrow money from an
// overdraft account would go here

} else {
balance -= amount;
// may result in negative account balance!
}
}
}

JavaFX Data Binding and Triggers

Binding and Objects

変数同士を関連づけて、一方の値が変わると、もう一方も変わるのが Binding

var x = 0;
def y = bind x;
x = 1;
println(y); // y now equals 1
x = 47;
println(y); // y now equals 47

Address も bind できる

var myStreet = "1 Main Street";
var myCity = "Santa Clara";
var myState = "CA";
var myZip = "95050";

def address = bind Address {
street: myStreet;
city: myCity;
state: myState;
zip: myZip;
};

println("address.street == {address.street}");
// address.street == 1 Main Street
myStreet = "100 Maple Street";
println("address.street == {address.street}");
// address.street == 1 Main Street

この場合、新しい Object が作成されるが、 Object を作成しない方法もある

def address = bind Address {
street: bind myStreet;
city: bind myCity;
state: bind myState;
zip: bind myZip;
};

この場合、最初の bind を省略することができる

def address = Address {
street: bind myStreet;
city: bind myCity;
state: bind myState;
zip: bind myZip;
};



Binding and Functions

var scale = 1.0;

bound function makePoint(xPos : Number, yPos : Number) : Point {
Point {
x: xPos * scale
y: yPos * scale
}
}

class Point {
var x : Number;
var y : Number;
}

var myX = 3.0;
var myY = 3.0;
def pt = bind makePoint(myX, myY);
println(pt.x); // 3.0

myX = 10.0;
println(pt.x); // 10.0

scale = 2.0;
println(pt.x); // 20.0

bound を外すと、最後の出力は 10.0 になる


Binding with Sequences

var seq1 = [1..10];
def seq2 = bind for (item in seq1) item*2;
printSeqs();

function printSeqs() {
println("First Sequence:");
for (i in seq1){println(i);}
println("Second Sequence:");
for (i in seq2){println(i);}
}

/* output
First Sequence:
1
2
3
4
5
6
7
8
9
10
Second Sequence:
2
4
6
8
10
12
14
16
18
20
*/


seq1 に item を追加すると、seq2 も変わる

var seq1 = [1..10];
def seq2 = bind for (item in seq1) item*2;
insert 11 into seq1;
printSeqs();

function printSeqs() {
println("First Sequence:");
for (i in seq1){println(i);}
println("Second Sequence:");
for (i in seq2){println(i);}
}

/*
First Sequence:
1
2
3
4
5
6
7
8
9
10
11
Second Sequence:
2
4
6
8
10
12
14
16
18
20
22
*/



Replace Triggers

任意の変数をトリガーに使うことができる
次のコードは password 変数が変更されると、メッセージが表示される

var password = "foo" on replace oldValue {
println("\nALERT! Password has changed!");
println("Old Value: {oldValue}");
println("New Value: {password}");
};

password = "bar";

/* output
ALERT! Password has changed!
Old Value:
New Value: foo

ALERT! Password has changed!
Old Value: foo
New Value: bar
*/

2008年12月12日金曜日

JavaFX Expressions 文法

Block Expressions 文法

var nums = [5, 7, 3, 9];
var total = {
var sum = 0;
for (a in nums) { sum += a };
sum;
}
println("Total is {total}."); // Total is 24

The if Expression

def age = 8;
var ticketPrice;0

if (age < 5 ) {
ticketPrice = 0;
} else if (age < 12 or age > 65) {
ticketPrice = 5;
} else {
ticketPrice = 10;
}
println("Age: {age} Ticket Price: {ticketPrice} dollars.");

次のように1行で書くことも可能

ticketPrice = if (age < 5) 0 else if (age > 5 and age < 12) 5 else 10;

Range Expressions

var num = [0..5];
var nums = [1..10 step 2]; // [ 1, 3, 5, 7, 9 ]
var nums = [10..1 step -1];
// [ 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 ]

The for Expression

var days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"];

for (day in days) {
println(day);
}

// Resulting sequence squares the values from the original sequence.
var squares = for (i in [1..10]) i*i;

// Resulting sequence is ["MON", "TUE", "WED", and so on...]
var capitalDays = for (day in days) day.toUpperCase();

The while Expression

var count = 0;
while (count < 10) {
println("count == {count}");
count++;
}

The break and continue Expressions

for (i in [0..10]) {
if (i > 5) {
break;
}

if (i mod 2 == 0) {
continue;
}

println(i);
}

The throw, try, catch and finally Expressions

try {
foo();
} catch (e: Exception) {
println("{e.getMessage()} (but we caught it)");
} finally {
println("We are now in the finally expression...");
}

function foo() {
var somethingWeird = false;

if(somethingWeird){
throw new Exception("Something weird just happened!");
} else {
println("We made it through the function.");
}
}

JavaFX Operator 演算子

演算子
+ (additive operator)
- (subtraction operator)
* (multiplication operator)
/ (division operator)
mod (remainder operator)

var result = 1 + 2; // result is now 3
println(result);

result = result - 1; // result is now 2
println(result);

result = result * 2; // result is now 4
println(result);

result = result / 2; // result is now 2
println(result);

result = result + 8; // result is now 10
println(result);

result = result mod 7; // result is now 3
println(result);

var result = 0;
result += 1;
println(result); // result is now 1

result -= 1;
println(result); // result is now 0

result = 2;
result *= 5; // result is now 10
println(result);

result /= 2; // result is now 5
println(result);

- (Unary minus operator; negates a number)
++ (Increment operator; increments a value by 1)
-- (Decrement operator; decrements a value by 1)
not (Logical complement operator; inverts the value of a boolean)

var result = 1; // result is now 1

result--; // result is now 0
println(result);

result++; // result is now 1
println(result);

result = -result; // result is now -1
println(result);

var success = false;
println(success); // false
prinln(not success); // true

var result = 3;
result++;
println(result); // result is now 4
++result;
println(result); // result is now 5
println(++result); // result is now 6
println(result++); // this still prints prints 6!
println(result); // but the result is now 7

Equality and Relational Operators

== equal to
!= not equal to
> greater than
>= greater than or equal to
< less than
<= less than or equal to

def num1 = 1;
def num2 = 2;

println(num1 == num2); // prints false
println(num1 != num2); // prints true
println(num1 > num2); // prints false
println(num1 >= num2); // prints false
println(num1 < num2); // prints true
println(num1 <= num2); // prints true

Conditional Operators

and
or
0110
def username = "foo";
def password = "bar";

if ((username == "foo") and (password == "bar")) {
println("Test 1: username AND password are correct");
}

if ((username == "") and (password == "bar")) {
println("Test 2: username AND password is correct");
}

if ((username == "foo") or (password == "bar")) {
println("Test 3: username OR password is correct");
}

if ((username == "") or (password == "bar")) {
println("Test 4: username OR password is correct");
}

// Test 1: username AND password are correct
// Test 3: username OR password is correct
// Test 4: username OR password is correct

Type Comparison Operator

def str1="Hello";
println(str1 instanceof String); // prints true

def num = 1031;
println(num instanceof java.lang.Integer); // prints true

漫画ベスト100

そのうち読みたいかも
http://xbrand.yahoo.co.jp/magazine/crea/822/1.html

2008年12月11日木曜日

JavaFX Sequence

Sequence を宣言する
sequence の要素を item という

var weekDays = ["Mon","Tue","Wed","Thu","Fri"];

コンパイラは item から型を判断する。上記の場合コンパイラは
String と判断する

型を明記することもできる

var weekDays: String[] = ["Mon","Tue","Wed","Thu","Fri"];

他のsequence を使って宣言することができる

var days = [weekDays, ["Sat","Sun"]];
// var = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"]

1 から 100 までの item の sequence を簡単に作ることが出来る

var nums = [1..100];

条件式を使って item を選択することができる

var nums = [1,2,3,4,5];

var numsGreaterThanTwo = nums[n | n > 2];
// numsGreaterThanTwo = [3,4,5]

sequence の長さは sizeof で得られる

var days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"];
println(sizeof days);
// 7

item を追加するには insert を使う

var days = ["Mon"];
insert "Tue" into days;
insert "Fri" into days;
insert "Sat" into days;
insert "Sun" into days;
// days = ["Mon","Tue","Fri","Sat","Sun"]

位置を指定して追加することができる

insert "Thu" before days[2];
insert "wed" after days[1];

item を削除するには delete を使う

delete "Sun" from days;
delete days[0];
delete days; // delete all items

item の順番を逆にするには reverse を使う

var nums = [1..5];
reverse nums; // returns [5, 4, 3, 2, 1]

sequence を比較することができる
2つの sequence の長さが同じで、item が同じとき
2つの sequence は等しいと判断される

var seq1 = [1,2,3,4,5];
var seq2 = [1,2,3,4,5];
println(seq1 == seq2); // true

var seq1 = [1,2,3,4,5];
var seq2 = [1,2,3,4,5,6];
println(seq1 == seq2); // false

var seq1 = [1,2,3,4,5];
var seq2 = [1,3,2,4,5];
println(seq1 == seq2); // false

sequence を slice して新しい sequence を作ることができる

seq[a..b]

var days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"];
var weekend = days[5..6]; // weekend = ["Sat","Sun"]

seq[a..< b]

var days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"];
var weekdays = days[0..<5];
// weekend = ["Mon","Tue","Wed","Thu","Fri"]

seq[a..]

var days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"];
var weekend = days[5..]; // weekend = ["Sat","Sun"]

seq[a..<]

var days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"];
var days2 = days[0..<];
// var = ["Mon","Tue","Wed","Thu","Fri","Sat"]

JavaFX 変数型

String

var s1 = 'Hello';
var s2 = "Hello";

文字列内で {} を使うと、変数値が代入される

def name = 'Joe';
var s = "Hello {name}";  // s = 'Hello Joe'

文字列内に条件式を入れることができる

def answer = true;
var s = "The answer is {if (answer) 'Yes' else 'No'}";
// s = 'The answer is Yes'

文字列をつなげる

def one = "This example ";
def two = "joins two strings.";
def three = "{one}{two}";   // join string one and string two
println(three);   // 'This example joins two strings.'



Number and Integer

def numOne = 1.0;  // compiler will infer Number
def numTwo = 1;   // compiler will infer Integer

def numOne : Number = 1.0;
def numTwo : Integer = 1;



Boolean

var isAsleep = true;

if (isAsleep) {
  wakeUp();
}



Duration

5ms;   // 5 milliseconds
10s;   // 10 seconds
30m;  // 30 minutes
1h;    // 1 hour



Void
関数に戻り値がないことを名言するときに使う

function printMe() : Void {
  println("I don't return anything!");
}

別に書かなくてもよし

function printMe() {
  println("I don't return anything!");
}



Null
Normal value がないことを示す
0や空文字列とは異なるコンパイルがされる

function checkArg(arg1: Address) {
  if(arg1 == null) {
    println("I received a null argument.");
  } else {
    println("The argument has a value.");
  }
}

2008年12月10日水曜日

JavaFX Object

Object の要素の区切りは、; , \n のどれでもOK

Address {
  street: "1 Main Street";
  city: "Santa Clara";
  state: "CA";
  zip: "95050";
}

Address {
  street: "1 Main Street"
  city: "Santa Clara"
  state: "CA"
  zip: "95050"
}

Address {
  street: "200 Pine Street",
  city: "San Francisco",
  state: "CA",
  zip: "94101",
}

Object を変数に割り当てるには

def addressOne = Address {
  street: "1 Main Street";
  city: "Santa Clara";
  state: "CA";
  zip: "95050";
}

def addressTwo = Address {
  street: "200 Pine Street";
  city: "San Francisco";
  state: "CA";
  zip: "94101";
}

Object を nest するには

def customer = Customer {
  firstName: "John";
  lastName: "Doe";
  phoneNum: "(408) 555-1212";
  address: Address {
    street: "1 Main Street";
    city: "Santa Clara";
    state: "CA";
    zip: "95050";
  }
}

JavaFX 変数と関数

定数を定義する

def numOne = 100;
def numTwo = 2;

変数を定義する

var result;

関数を定義する

function add(){
result = numOne + numTwo;
println("{numOne} + {numTwo} = {result}");
}

引数を使う

function divide(argOne: Integer, argTwo: Integer){
result = argOne / argTwo;
println("{argOne} / {argTwo} = {result}");
}

戻り値を使う

function add(argOne: Integer, argTwo: Integer){
result = argOne + argTwo;
println("{argOne} + {argTwo} = {result}");
return result;
}

コマンドラインからの入力を読み込む

function run(args : String[]){
def numOne = java.lang.Integer.parseInt(args[0]);
def numTwo = java.lang.Integer.parseInt(args[1]);
add(numOne,numTwo);
}

コンパイルする

javafxc calculator.fx

実行する

javafx calculator

黒いシャンパングラス

これいいなぁ。
http://xbrand.yahoo.co.jp/magazine/brio/896/1.html

新規作成

ブログ作ってみました。