初学javafx 写了个小例子,没有使用图片, 代码较乱 如下:

/**//*
* JDI.fx
*
* Created on 2009-7-22, 19:06:20
*/

package gui;

import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.text.Text;
import javafx.scene.text.Font;
import javafx.scene.paint.Color;
import javafx.scene.effect.Reflection;
import javafx.scene.shape.Line;
import javafx.scene.shape.Rectangle;
import javafx.scene.*;
import javafx.scene.effect.*;
import javafx.scene.input.KeyEvent;
import javafx.scene.input.KeyCode;
import javafx.scene.image.*;
import javafx.animation.Timeline;
import javafx.animation.KeyFrame;
import javafx.animation.Interpolator;
import javafx.scene.control.Button;
import javafx.scene.input.MouseEvent;

/** *//**
* @author ericjoe
*/
// var k = KeyEvent.CHAR_UNDEFINED.
var complete = false;


var background=ImageView
{
focusTraversable:true

onKeyPressed: function( e: KeyEvent ):Void
{
if(complete==false)move(e);
}
}
var logot=0;

var logarc=Rectangle
{
x: 0, y: 0
width: 200, height: 80
fill: Color.BLUEVIOLET
}

var logoline=Line
{
startX: 10, startY:40
endX: 690, endY: 40
strokeWidth: 1
stroke: Color.RED
}

var gamelogo=Text
{
fill:Color.BLACK
translateX:bind logot

effect:Reflection
{
fraction: 0.75
topOffset: 0.0
topOpacity: 0.4
bottomOpacity: 0.0
}

font : Font
{
size: 30;
}
x: -120, y: 30
content: "move game"
}
var goNum=0;

var state= bind if(complete)then "complete! use {goNum} steps" else "step:{goNum}";
var statex=0;

var gamestate=Text
{
fill:Color.YELLOWGREEN

font : Font
{
size: 24
}
x: 800, y: 65
content: bind state;
}


var gameline=Line
{
startX: 10, startY:80
endX: 690, endY: 80
strokeWidth: 1
stroke: Color.BLUEVIOLET
}

var gameframe=Rectangle
{
x: 10, y: 100
width: 580, height: 580
fill: Color.BLACK
focusTraversable:true
}

var t=[1..8];
var r= new java.util.Random();
var cards:Card[]= getCards();

function getCards():Card[]
{
var n = 0;
var cardsinit:Card[];

for(i in [0..7])
{

var card=Card
{
recX:10+(580/3)*n
recY:100+(580/3)*(i/3)
cardTextX: 10+(580/3)*n+70
cardTextY:100+(580/3)*(i/3)+120
cardTextConten:getTextContent();
}
insert card into cardsinit;
n++;
if(n==3)then n=0;
}
t=[1..8];
cardsinit;
}
var main=true;

var changeButton=Button
{
text: "change"
layoutX:900
layoutY:10

onMousePressed: function( e: MouseEvent ):Void
{
cards=getCards();
btx=10+(580/3)*2;
bty=100+(580/3)*2;
complete=false;
goNum=0;
}

onKeyPressed: function( e: KeyEvent ):Void
{
if(complete==false)move(e);
}
}
var htext="help";

var helpButton=Button
{
text: bind htext;
layoutX:1000
layoutY:10
width:100

action: function()
{
htext=if(htext=="help") then "back to game" else "help";
main=if(main==true)then false else true;
}

onKeyPressed: function( e: KeyEvent ):Void
{
if(complete==false)move(e);
}
}

var rightgroup=Group
{
translateX:bind statex;
content: [
changeButton,
gamestate,
helpButton
]
}


function getTextContent():Integer
{
// println(t.size());
var i = t[r.nextInt(sizeof t)];
delete i from t;
return i;
}
var btx:Number=10+(580/3)*2;
var bty:Number=100+(580/3)*2;

var cardBlank = Rectangle
{
x: bind btx ,
y: bind bty ,
width: 580/3, height: 580/3
fill: Color.BLACK
}
var cardsc=0.0;

var cardsGroup= Group
{
opacity:bind cardsc;
focusTraversable:true
content:bind [
cards,
cardBlank
]
}

var helptext = Text
{

font : Font
{
size: 24
}
fill:Color.YELLOWGREEN
x: 150, y: 300
content: " use ↑↓← → to move the chess";

}
var scorrt=0;

var scorrtext = Text
{

font : Font
{
size: 12
}
translateX:bind scorrt;
fill:Color.YELLOWGREEN
layoutX:-110
layoutY:95
// x: 10, y: 95
content: "a javafx example";

}



var mainSence = Scene
{
width: 600
height:700
fill:Color.BLACK
content:bind [
background,
rightgroup,
logoline,
scorrtext,
logarc,
gamelogo,
gameline,
gameframe,
if(main)then cardsGroup else helptext
]
}

Stage
{
title: "move game"
resizable:false
scene: mainSence