JavaFX 1.0入门

 

Sun终于在上周四(04-12-2008)发布了我们期盼已久的JavaFX 1.0版本。Sun想借助JavaFX这个强大的开发平台,把Java在服务器端的辉煌扩大到包括浏览器和桌面在内的客户端领域。这样,Sun就可以在竞争激烈的RIA(Rich Internet Applictions)领域中和AdobeFlexMicrosoftSilverlight一较高下。笔者以前针对JavaFx0.0.2版本写过一篇短文(http://blog.csdn.net/carlwu/archive/2008/05/09/2419776.aspx),指出了JavaFX的四点不足之处。但从刚刚发布的JavaFX1.0来看,Sun改进了其中的三个缺点,即在JavaFX开发工具、JavaFX对多媒体影像的支持、JavaFX的网络部署等方面有了很大的进步。所以,我觉得JavaFX1.0现在虽然还稍稍落后于SilverlightFlex,但JavaFX可能会对我们的实际项目有所帮助,尤其对我们广大的Java开发者而言。

SunJavaFX的简单介绍请参见http://www.javafx.com/launch/win-player.jsp Sun提供了几段令人印象深刻的演示。其中,JavaFXPhotoshop的集成对我们开发者来说可能关系不大,JavaFX媒体播放器、JavaFX的拖拽功能及JavaFX3D图片展示可能会另我们耳目一新。Sun直言,JavaFX将对我们Java开发者、Web开发者及图像设计者会有所裨益。我也衷心希望Sun借助JavaFX平台在RIA领域能有所作为。

下面我们就开始我们的JavaFX的入门之旅,简单领略一下JavaFX的魅力。

  1. 准备工作

首先,您得从http://www.javafx.com/downloads/windows.jsp下载NetBeans 6.5,同时升级您的JDK到最新版本(我的本机为JDK6u11)

  1. 请打开NetBeans,新建一个项目,项目类型选择JavaFX,然后输入项目名称HelloJavaFX,同时创建主项目文件hellojavafx.Main
  2. NetBeans会创建一个缺省的JavaFX项目,我们打开Main.fx,将下面的源代码覆盖NetBeans自动生成的代码:
  1. /*
  2.  * Main.fx
  3.  *
  4.  * Created on 2008-12-9, 17:05:46
  5.  */
  6. package hellojavafx;
  7. import javafx.animation.Interpolator;
  8. import javafx.animation.KeyFrame;
  9. import javafx.animation.Timeline;
  10. import javafx.scene.effect.DropShadow;
  11. import javafx.scene.paint.Color;
  12. import javafx.scene.paint.RadialGradient;
  13. import javafx.scene.paint.Stop;
  14. import javafx.scene.Scene;
  15. import javafx.scene.shape.Circle;
  16. import javafx.scene.text.Font;
  17. import javafx.scene.text.Text;
  18. import javafx.scene.text.TextAlignment;
  19. import javafx.scene.transform.Scale;
  20. import javafx.stage.Stage;
  21. /**
  22.  * @author carlwu
  23.  */
  24. var scale = 1.0;
  25. var color = Color.YELLOW;
  26. Timeline {
  27.     repeatCount: Timeline.INDEFINITE
  28.     keyFrames: [
  29.         KeyFrame {
  30.             time: 5s
  31.             canSkip: true
  32.             values: [
  33.                 scale => -1.0 tween Interpolator.EASEBOTH
  34.                 color => Color.GREEN
  35.             ] // values
  36.         } // KeyFrame
  37.     ] // keyFrames
  38. }.play();
  39. Stage {
  40.     title: "/u6211/u7684/u7b2c/u4e00/u4e2aJavaFX"
  41.     width: 250
  42.     height: 250
  43.     scene: Scene {
  44.         content: [
  45.             Circle {
  46.                 centerX: 100,
  47.                 centerY: 100
  48.                 radius: 90
  49.                 fill: RadialGradient {
  50.                     centerX: 75
  51.                     centerY: 75
  52.                     radius: 90
  53.                     proportional: false
  54.                     stops: [
  55.                         Stop {
  56.                             offset: 0.0
  57.                             color: Color.BLUE},
  58.                         Stop {
  59.                             offset: 1.0
  60.                             color: Color.YELLOW}
  61.                     ] // stops
  62.                 } // RadialGradient
  63.                 radius: 90
  64.                 fill: Color.RED
  65.             }
  66.             Text {
  67.                 font: Font {
  68.                     size: 24
  69.                 }
  70.                 x: 20,
  71.                 y: 90
  72.                 textAlignment: TextAlignment.CENTER
  73.                 content:"/u6b22/u8fce/u8fdb/u5165 /nJavaFX /u7684/u4e16/u754c"
  74.                 fill: bind color
  75.                 effect: DropShadow {
  76.                     offsetX: 10
  77.                     offsetY:10
  78.                     color: Color.color(0.10.30.1)
  79.                 };  // DropShadow
  80.                 transforms: Scale{
  81.                     x: 1
  82.                     y: bind scale
  83.                     pivotX: 100,
  84.                     pivotY: 100
  85.                 } // Scale
  86.             } // Text
  87.         ]
  88.     }
  89. }

然后,右击Main.fx文件,先编译然后运行该文件,运行效果如下:

 

 

您会看到窗口上的两行字的动画效果。上面的代码非常简单,其中,Timeline类似于Flash中的时间线的概念,随着时间线的推移,关键帧发生变化,所以产生动画效果。另外,Stage就相当于以前Swing中的Window,是最顶级的容器;Stage中包含了次级的容器Scene 的实例scene,这相当于以前的Graphics画布对象,scene对象中又包含了一个Circle对象和Text对象,代码的结构还是相当清楚的。JavaFX是一种声明式的脚本语言,但它不是动态语言。关于JavaFX脚本语言的细节及API,请参考SunJavaFX教程http://java.sun.com/javafx/1/tutorials/core/,在此我就不多说了。

4. 关于JavaFX的部署

JavaFX模糊了桌面应用和网络应用的概念,就上面的简单示例来说,请在资源管理器中打开该项目所在的目录,您会发现该目录下有一个dist的子目录,子目录中包含了一个HelloJavaFX.jnlpJava Web Start的启动文件,如果您双击该文件,它就会启动Java Web Start,您此时的应用就是一个桌面应用程序;另外,dist子目录下还有一个HelloJavaFX.html文件,如果您在浏览器中打开这个文件,您应看到如下图所示的效果:

 

 

 5. JavaFX小结

通过上面简单的示例,我们可以看到,JavaFXSun公司下一代RIA技术的代表,它在多媒体的支持、IDE集成、拖拽功能、对移动开发的支持及和其它技术的集成上面,都有可圈可点之处。如果您对RIA开发有兴趣,不妨抽时间可以学习一下JavaFX。另外,我觉得Sun还可以在IDE上多下工夫,真正做到“所见即所得”的效果,虽然现在JavaFX有预览的功能。另外,EclipseJavaFX1.0插件也不知何时能推出?

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,我们需要创建一个JavaFX应用程序,并在Scene中添加一个Canvas对象来绘制直线。然后我们需要实现定点旋转直线的方法。 以下是一个简单的实现: ```java import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.canvas.Canvas; import javafx.scene.canvas.GraphicsContext; import javafx.scene.layout.StackPane; import javafx.scene.paint.Color; import javafx.stage.Stage; public class Main extends Application { private static final int WIDTH = 400; private static final int HEIGHT = 400; @Override public void start(Stage primaryStage) throws Exception { Canvas canvas = new Canvas(WIDTH, HEIGHT); GraphicsContext gc = canvas.getGraphicsContext2D(); // 绘制直线 double startX = 100; double startY = 100; double endX = 300; double endY = 100; gc.strokeLine(startX, startY, endX, endY); // 定点旋转直线 double pivotX = 200; double pivotY = 200; double angle = 45; // 旋转角度,单位为度 double radians = Math.toRadians(angle); // 将角度转换为弧度 double newX = pivotX + (endX - pivotX) * Math.cos(radians) - (endY - pivotY) * Math.sin(radians); double newY = pivotY + (endX - pivotX) * Math.sin(radians) + (endY - pivotY) * Math.cos(radians); gc.setStroke(Color.RED); gc.strokeLine(pivotX, pivotY, newX, newY); StackPane root = new StackPane(canvas); primaryStage.setScene(new Scene(root)); primaryStage.show(); } public static void main(String[] args) { launch(args); } } ``` 在这个实现中,我们首先绘制了一条直线,然后使用定点旋转公式计算出旋转后的新坐标,并用红色画笔绘制出旋转后的直线。 值得注意的是,这个实现中只是演示了如何实现定点旋转直线,实际应用中可能需要对旋转后的直线进行进一步处理,例如裁剪、平移等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值