`
javafxguy
  • 浏览: 151469 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

JavaFX的Effect功能例子:编写许愿树程序(3)

阅读更多

重点推荐JavaFX文章:怎样用JavaFX编写游戏:吃豆人(Pac-Man)

 

在文章《 用JavaFX的effect实现许愿树(2) 》中,我们增加了鼠标事件处理逻辑和扩展多边形Polygon来画成的愿望星,我们已经可以在 JavaFX 的许愿树上悬挂许多五彩缤纷的愿望星了。现在,我们给程序再增加些功能,使得我们可以在星星上记录下许愿者的名字和愿望,那样就知道星星是谁的了。你可以点击以下画面启动许愿树,点击许愿树后,可以看到一个弹出的窗口来输入你的名字和愿望,点击“OK”确认。如果再次点击同一颗星星,就可以查看或修改愿望的内容,快来试试看吧,点击下图可启动程序:(JDK1.5以上或JDK 1.6)

  

点击启动许愿树程序

 

点击启动许愿树程序3

我们来看看如何增加一个半透明的输入窗口,代码在Dialog类中。首先,我们定义一个CustomNode。javafx.scene.CustomNode提供了用户自定义图形结点(Node)的方法,程序中需要继承该类,然后实现create()函数并返回自定义的Node。我们的CustomNode由一个Group实例来实现,包括一个蓝色半透明的外围框,两个输入框,两个文本以及一个“OK”按钮。Dialog.fx的代码如下:

 

( JAVAFX参考文章:
用JavaFX的Effect实现许愿树(1)
用JavaFX的Effect功能编写许愿树(1)
JavaFX 1.1和1.0的兼容性 http://blog.sina.com.cn/javafxcenter
JavaFX和Java之间的互操作性
Java和JavaFX的互操作性

 

/*
 * Dialog.fx
 *
 * http://www.javafxblogs.com
 */

package wishtree;

import javafx.ext.swing.SwingButton;
import javafx.ext.swing.SwingTextField;
import javafx.scene.CustomNode;
import javafx.scene.Group;
import javafx.scene.layout.VBox;
import javafx.scene.Node;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
import javafx.scene.text.TextOrigin;
import javafx.stage.Stage;

/**
 * @author Henry Zhang
 */

public class Dialog extends CustomNode {

  public var stage: Stage;
  public var star : Star;

  var w = bind stage.width;
  var h = bind stage.height;

  public var nameField : SwingTextField;
  public var wishField : SwingTextField;

  public function show( s: Star): Void {
    star = s;
    wishField.text = s.wish;
    nameField.text = s.name;
    visible = true;
  }

  public override function create(): Node {
    Group {
      blocksMouse: true;
      translateX: bind w / 6
      translateY: bind h / 4

      content: [
        Rectangle {
          stroke: Color.WHITE
          strokeWidth: 3
          width: bind w * 2 / 3
          height: bind h / 2
          fill : Color.BLUE;
          opacity: 0.5
          arcHeight: 10
          arcWidth: 10
        },
        // 本文发表自 http://www.javafxblogs.com
        VBox {
          spacing: 15
          translateX: bind w / 6
          translateY: bind h / 8
          content: [
            Text {
              content: "名字:"
              textOrigin: TextOrigin.TOP
              fill: Color.YELLOW
              font: Font.font ( null, FontWeight.BOLD, 20);
            },
            nameField = SwingTextField {
              text: "your name"
              width: bind w / 4
            },
            Text {
              content: "愿望:"
              textOrigin: TextOrigin.TOP
              fill: Color.YELLOW
              font: Font.font ( null, FontWeight.BOLD, 20);
            },
            wishField = SwingTextField {
              text:  "我希望..."
              width: bind w * .4
            },
            SwingButton {
              text: "OK"
              action: function():Void {
               star.name = nameField.text;
               star.wish = wishField.text;

               visible = false;
              }
            }
          ]
         },
     ]
   }
  }
}

 

 在create()函数中,我们定义了圆角矩形的透明度为0.5,即可产生半透明的效果,arcHeight和arcWidth两个变量决定了圆角的大小。JavaFX技巧、编程和技术JavaFX Guy技术应用博客

 

 Rectangle {
          stroke: Color.WHITE
          strokeWidth: 3
          width: bind w * 2 / 3
          height: bind h / 2
          fill : Color.BLUE;
          opacity: 0.5
          arcHeight: 10
          arcWidth: 10
        },

 

VBox的作用是把UI元素在垂直排列,相当于LayoutManager的作用。当点击OK按钮时,我们把对话框隐藏,并且把输入值赋给相关的Star对象。Group的属性中,我们设置了blocksMouse的属性,从而防止鼠标事件传导到下层的图形元素中。

 

接下来,我们把Main.fx略作修改,在生成Star实例时加入事件处理逻辑,使得星星在点击时可以弹出修改对话框,代码如下:

 

var tree : ImageView = ImageView {
  x: 80
  y: 0
  image: Image {
           url: "{__DIR__}images/tree.png"
           width: 640
           preserveRatio: true
         }
  onMousePressed:
    function(e:MouseEvent) : Void {

      // do nothing when the dialog is enabled
      if ( dialog.visible ) return;

      if ( e.y < 343 ) {
        currentStar = Star{
                  translateX: e.x
                  translateY: e.y

                  onMousePressed: function(e:MouseEvent) : Void {
                    // do nothing when the dialog is enabled
                    if ( dialog.visible ) return;

                    var self = e.node as Star;
                    dialog.show(self);
                  }
                 } ;

        dialog.show(currentStar);
        insert currentStar after stage.scene.content[currentIndex++];
      }
    }
};

  

 

至此,单机版的许愿树就完成了。代码可以在这里下载:JavaFX许愿树源代码。下一步,我们会把这个单机版的改成联网版,这样不同的用户可以通过网页在同一棵许愿树上许愿了。需要做的工作包括把用户的许愿请求发送到网站,然后存入数据库中,再通过许愿树展现出来。服务器端的代码可重用原来PHP版本的代码,或者新写都可以。

 

本文同步发表于: JavaFX许愿树程序:Effect功能的应用(3)

 

 

分享到:
评论
1 楼 aisjava 2009-05-19  
<p>有些知识点以前没有注意到,很值得一学。</p>
<p>期待你的联网版。</p>

相关推荐

    JavaFX+官方教程:RIA+应用开发

    JavaFX是Oracle公司推出的一种用于构建富互联网应用程序(RIA)的平台,它为开发者提供了丰富的图形用户界面(GUI)工具和组件,使得开发者可以创建出具有高质量、高性能、跨平台的应用程序。本教程将深入探讨JavaFX...

    javaFX 3D小例子

    在JavaFX中,开发者可以利用其3D功能来构建具有复杂视觉效果的应用,如本例中的“javaFX 3D小例子”,它是一个使用JavaFX 3D API实现的水分子模拟结构的Idea工程。 首先,我们要理解JavaFX 3D API的核心概念。...

    javafx2.0官方例子

    javafx2.0,java,javafx,例子,代码 Sun公司(已于20092008年12月05日发布了JavaFX技术的正式版,它使您能利用 JavaFX 编程语 言开发富互联网应用程序(RIA)。JavaFX Script编程语言(以下称为JavaFX)是Sun微...

    javafx使用指南-目录版.pdf

    3. 网络应用程序:JavaFX 可以用于开发网络应用程序,例如 web 应用程序和 Rich Internet Applications 等。 JavaFX 的主要组件包括: 1. JavaFX SDK:JavaFX 的软件开发套件,提供了 JavaFX 的所有功能和工具。 2...

    javafx-11.0.2 jar.rar

    3. **JavaFX Graphics**: 提供了2D和3D图形绘制的接口和类,支持图形渲染、几何形状、颜色管理等功能。`javafx.graphics.jar`是这个模块的实现,用于创建富有视觉效果的应用程序。 4. **JavaFX Media**: 用于处理...

    JavaFx 官方源码例子

    JavaFX是Java平台上的一个强大的用户界面工具包,用于创建桌面、移动和Web应用程序。它提供了丰富的图形和媒体功能,支持2D和3D渲染、CSS样式以及自定义控件。这个压缩包包含了一些官方提供的JavaFX源码示例,非常...

    JavaFX 官方教程:RIA 应用开发

    JavaFX 官方教程:RIA 应用开发

    JavaFX + MySql 实现学生信息管理系统

    JavaFX和MySQL是两个在软件开发中常用的工具,它们结合可以构建功能强大的应用程序,特别是用于创建用户界面和管理数据库的数据驱动应用。在这个“学生信息管理系统”中,JavaFX作为前端框架,提供了丰富的图形用户...

    JavaFX高级教程:JavaFX2.0的FXML语言(中文版)

    JavaFX 2.0 是一个强大的富互联网应用程序(RIA)平台,用于构建具有美观图形界面的应用程序。在JavaFX 2.0中,FXML(FXML Language)被引入,这是一种基于XML的声明性语言,专门用于定义应用程序的用户界面。这个...

    JavaFX高级教程:部署JavaFX2.0应用

    然后,创建一个新的 JavaFX 项目,并编写一个简单的 JavaFX 应用程序。最后,使用 NetBeans IDE 运行应用程序。 Application Execution Modes ----------------------------- JavaFX 应用程序有三种执行模式:...

    javafx的单机版许愿树

    javafx的单机版许愿树,从网上看到的实例,学习了一下加了几行代码,备份

    JavaFX 构建GUI 应用程序

    通过以上八个课程的学习,开发者不仅可以掌握JavaFX的基本使用方法,还能深入理解如何构建高质量、功能丰富的GUI应用程序。无论是对于初学者还是有一定经验的开发人员来说,这些课程都是宝贵的学习资源。

    javafx之fxml例子_用户登录

    通过这个“javafx之fxml例子_用户登录”的实践,开发者可以深入理解JavaFX和FXML在创建GUI应用中的强大功能。同时,它也展示了如何利用IDE(如NetBeans)简化开发流程,提高开发效率。学习并掌握这些知识,将有助于...

    javaFX完整项目案例可用.zip

    JavaFX是一个用于构建桌面、移动和嵌入式设备上的富客户端应用程序的开源框架。它提供了丰富的用户界面组件和强大的2D/3D图形功能,使得开发者可以创建出具有吸引力的图形用户界面。在这个名为"javaFX完整项目案例...

    JavaFx例子 大家看看

    7. **src**:源代码目录,通常包含.java文件,是编写JavaFX程序的主要部分。通过查看源码,可以深入理解各个示例的实现细节,包括控件的使用、事件处理、布局管理等。 这些JavaFX示例程序为初学者提供了很好的学习...

    使用JavaFX2.0编写国际象棋游戏

    JavaFX是一个用于创建桌面、Web以及移动设备上富客户端应用程序的强大的图形库。通过这个项目,我们可以深入理解JavaFX的基本概念,以及如何将这些概念应用于实际的游戏开发。 首先,让我们了解JavaFX 2.0的主要...

    JavaFx电子书HTML格式

    JavaFX是一种用于构建桌面、移动和嵌入式设备上的富客户端应用程序的技术,它基于Java语言。这个电子书以HTML格式提供,是官方发布的正式文档,对于已经有一定JavaFX基础的开发者来说,是一份非常宝贵的参考资料。 ...

    [JavaFX.2.0:Introduction.by.Example].Carl.Dea.文字版.pdf

    JavaFX 2.0是Java平台下一代图形用户界面(GUI)工具包,为开发者提供了一个强大的框架来快速构建功能丰富、视觉效果出色的跨平台应用程序。与之前的版本相比,JavaFX 2.0进行了重大改进,包括硬件加速图形渲染、更...

    一个极简单JavaFX例子

    JavaFX是一种用于构建桌面、移动和嵌入式设备上的富客户端应用程序的开源框架。它提供了一个灵活的图形用户界面(GUI)工具包,允许开发者...通过实践和学习,你将能够利用JavaFX开发出功能强大、界面美观的应用程序。

Global site tag (gtag.js) - Google Analytics