java fx demo_javafx demo

/*

* 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 dbsuser

*/

// var k = KeyEvent.CHAR_UNDEFINED.

var complete = false;

var background=ImageView {

focusTraversable:true

onKeyPressed: function( e: KeyEvent ):Void {

if(complete==false)move(e);

}

image: Image {

url: "{__DIR__}pic/cs.jpg"

height:700

width:600

smooth:true

}

}

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

content:bind [

background,

rightgroup,

logoline,

scorrtext,

logarc,

gamelogo,

gameline,

gameframe,

if(main)then cardsGroup else helptext

]

}

Stage {

title: "move game"

resizable:false

scene: mainSence

}

function move(e:KeyEvent):Void{

changeButton.focusTraversable=false;

if(e.code==KeyCode.VK_DOWN){

if(cardBlank.y==100){

// println("cont not move")

}else{

for(g in cards){

if(g.recY-cardBlank.y==-580/3 and g.recX==cardBlank.x){

g.recY+=580/3;

g.cardTextY+=580/3;

bty-=580/3;

break;

}

}

goNum++;

}

}

if(e.code==KeyCode.VK_UP){

if(cardBlank.y==100+(580/3)*2){

// println("cont not move")

}else{

for(g in cards){

if(g.recY-cardBlank.y==580/3 and g.recX==cardBlank.x){

g.recY-=580/3;

g.cardTextY-=580/3;

bty+=580/3;

break;

}

}

goNum++;

}

}

if(e.code==KeyCode.VK_LEFT){

if(cardBlank.x==10+(580/3)*2){

// println("cont not move")

}else{

for(g in cards){

if(g.recX-cardBlank.x==580/3 and g.recY==cardBlank.y){

g.recX-=580/3;

g.cardTextX-=580/3;

btx+=580/3;

break;

}

}

goNum++;

}

}

if(e.code==KeyCode.VK_RIGHT){

if(cardBlank.x==10){

// println("cont not move")

}else{

for(g in cards){

if(g.recX-cardBlank.x==-580/3 and g.recY==cardBlank.y){

g.recX+=580/3;

g.cardTextX+=580/3;

btx-=580/3;

break;

}

}

goNum++;

}

}

checkComplete();

// showOk

}

function checkComplete():Void{

var num=0;

for(card in cards){

if(card.atRightPosition())then num++;

}

if(num==8)then complete=true;

}

class Card extends Group{

// public var opac:Number;

public var recX:Number;

public var recY:Number;

public var cardTextX:Number;

public var cardTextY:Number;

public var cardTextConten:Integer;

var cardrec= Rectangle {

x: bind recX;

y: bind recY;

width: 580/3, height: 580/3

fill: Color.RED

stroke:Color.BLACK

}

var cardTet= Text {

font : Font {

size: 90

embolden:true

}

x: bind cardTextX;,

y: bind cardTextY;

content: "{cardTextConten}";

}

override var content = bind [cardrec, cardTet];

//override var opacity= bind cardsc;

function getText():String{

return cardTet.content;

}

function atRightPosition():Boolean{

var nowP= (this.recX-10)*3/580+1+((this.recY-100)*3/580)*3;

var a:String="{nowP}";

var arr = a.split("[.]");

if(arr[1].equals("0"))then a=arr[0] else a="{Integer.parseInt(arr[0])+1}";

return a==this.getText();

}

}

Timeline {

repeatCount:1

keyFrames : [

KeyFrame {

time : 1s

canSkip : true

values : [

logot=>140 tween Interpolator.LINEAR

]

action: function(){

cardstime.play();

}

}

]

}.play();

Timeline {

repeatCount: Timeline.INDEFINITE

keyFrames : [

at(10s){scorrt=>720 tween Interpolator.EASEIN}

]

}.play();

var cardstime =Timeline {

repeatCount:1

keyFrames : [

KeyFrame {

time : 1s

canSkip : true

values : [

cardsc=>1.0 tween Interpolator.EASEIN

]

action: function() {

println(cardsc);

statetime.play();

}

}

]

}

var statetime = Timeline {

repeatCount:1

keyFrames : {

at(1s)

{

statex=>-580 tween Interpolator.LINEAR;

};

} }

效果如下:

0818b9ca8b590ca3270a3433284dd417.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FXML 是 JavaFX 中的一种 XML 格式文件,用于描述用户界面。FXML 文件中定义了 UI 元素的层次结构、属性和事件处理程序等。通常,FXML 文件与一个控制器类相关联,控制器类负责控制 UI 元素的行为。 下面是一个简单的 FXML 布局示例,包含一个 Label 和一个 Button: ```xml <?xml version="1.0" encoding="UTF-8"?> <?import javafx.scene.control.*?> <?import javafx.scene.layout.*?> <BorderPane xmlns:fx="http://javafx.com/fxml" fx:controller="com.example.MyController"> <center> <Label text="Hello, World!"/> </center> <bottom> <Button text="Click Me!" onAction="#handleButtonClick"/> </bottom> </BorderPane> ``` 在这个示例中,使用了 `BorderPane` 作为根布局,其中包含一个 `Label` 和一个 `Button`。`fx:controller` 属性指定了关联的控制器类为 `com.example.MyController`。 控制器类可以通过 `@FXML` 注解将 FXML 文件中的 UI 元素注入到类中,例如: ```java public class MyController { @FXML private Label myLabel; @FXML private Button myButton; public void handleButtonClick(ActionEvent event) { myLabel.setText("Button clicked!"); } } ``` 在控制器类中,将 `Label` 和 `Button` 对应的变量使用 `@FXML` 注解标记,表示这些变量将通过 FXML 文件进行注入。在 `handleButtonClick` 方法中,可以操作 `myLabel` 变量,修改标签的文本。 最后,通过 `FXMLLoader` 类从 FXML 文件中加载 UI 元素和控制器类,例如: ```java FXMLLoader loader = new FXMLLoader(getClass().getResource("example.fxml")); Parent root = loader.load(); Scene scene = new Scene(root); stage.setScene(scene); stage.show(); ``` 这样就可以将 FXML 文件中定义的 UI 元素和控制器类加载到 JavaFX 应用程序中了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值