JavaFX能穿越之后来居上上吗

JavaFX学习之简单浏览器基础功能实现
JavaFX学习之简单浏览器基础功能实现
通过前面几天的学习,我们已经搭建了一个简单浏览器的雏形。接下来就是实现浏览器该有的基础功能了,先列出今天要实现的功能:1. 在地址栏输入域名或IP地址后按回车时应该加载对应的页面,输入其他内容时可以调用搜索引擎进行搜索;2. 当浏览器中点击链接跳转时地址栏内容需要更新为当前链接;3. 地址栏获取焦点时全选当前内容,方便输入;4. 标签页名称需要显示当前页面的Title;5. 实现前进、后退、刷新及主页按钮功能;现在逐条分析下该如何实现:第一条:需要用到正则表达式判断输入的内容是否为有效的链接或IP地址,如果不是则调用搜索引擎搜索输入的内容;如果是则继续判断是否以“http://”、“https://”或“ftp://”开头,如果都不是默认添加上“http://”后再加载页面。针对以上分析在网上找到正则表达式,一个判断是否是有效域名或IP,另一个判断是否以指定协议开头。前面学习时已经为地址栏添加了键盘释放事件监听,现在修改这个事件监听函数,在输入回车时获取输入的内容进行分析,并作出相应的处理。代码如下图:第二条:需要监听WebView地址变更事件,当地址发生变更时同步更新地址栏即可。第三条:需要监听地址栏焦点事件,当地址栏获取焦点时全选地址栏内容。针对第三条的分析作者通过给input的focusedProperty属性添加ChangeListener发现并没有达到预期的效果,于是尝试其他方法来解决。最后通过监听鼠标点击事件,当鼠标点击时如果焦点在输入框末尾则全选内容,其他位置不进行全选,这里鼠标点击事件采用代码的方式实现,与之前所学的@FXML绑定事件监听方法效果是一样的。第四条:前面搭建雏形时Tab页名称为“新标签”,页浏览器中加载页面时未改变这个标签名称。这里将标签名称与WebView中WebEngine的Title属性进行绑定即可,需要在DemoController中绑定TabPane组件初始化时获取Tab。这里不直接绑定Tab因为后续对TabPane还有其他操作。监听WebView地址变更事件、地址栏焦点事件及Tab标签绑定都放在初始化方法当中,代码如下:第五条:接下来给前进、后退、刷新及主页按钮添加监听事件绑定,具体绑定操作可以参考作者前面的文章,这里不再详细说明。前进及后退需要用到WebView中的WebHistory,具体操作实现代码如下图所示:今天就学习到这,本例所有代码已提交到作者github:/ajtdnyy/JavaFXDemo
本文仅代表作者观点,不代表百度立场。系作者授权百家号发表,未经许可不得转载。
百家号 最近更新:
简介: 业余写些小工具与大家分享
作者最新文章博客分类:
Sun确实反应太慢,在Adobe Flash平台已经可以开发产品级RIA应用的时候,它给出的road map还是慢慢腾腾:
2008年7月,Sun将开放JavaFX Desktop SDK
2008秋,JavaFX Desktop 1.0 发布
2009春,JavaFX Mobile and TV 1.0发布
也就是说,截至今天,1.0依然在按计划进行中,我们体验的只是Preview版本(Sun也不建议用这个版本进行产品开发),似乎让人灰心,但没关系,相信Sun可以后来居上,譬如NetBeans之于Eclipse(当然它们至今仍未分高下)。从上面也可以看出,JavaFX Desktop和JavaFX Mobile and TV 都会发布,似乎又回到了1995年时候的Sun目标。
OK,先让我们来看一下JavaFX到底是什么。
JavaFX Preview SDK 是JavaFX platform的体验版本。这一版本是定位于web脚本开发人员和那些想事先体验JavaFX技术和工具的家伙。这一SDK同样包含"Nile Project",这是一套工具和插件,能让脚本开发人员用拖放的方式建立图形化的东西。运行JavaFX Application需要:
1.Java SDK 1.6 Update 7或更新,最好是Update 10
2.JavaFX Preview SDK (上面说了,JavaFX SDK 1.0还在娘胎中),请下载Netbeans IDE 6.1 with JavaFX: /htdocs/downloadpage.html
而开发JavaFX,则需要写JavaFX Script,这是一种新的脚本语言,旨在方便高效地创建图形界面及绑定数据,而这个所谓的图形界面,最终调到的是swing,但需要注意:
1.JavaFX能提供Swing所没有的一些Widgets
2.对Swing组件的的操作,使用JavaFX Script可能有所限制,也即是说,Swing里面对图形界面元素控制的一些方法或属性,在Java FX里面可能不存在。
下面是用JavaFX开发的一个Clock,其实Swing也完全可以做到:
JavaFX Script看上去:
pa
import javafx.application.F
import javafx.application.S
import javafx.scene.CustomN
import javafx.scene.G
import javafx.scene.N
import javafx.scene.geometry.C
import javafx.scene.paint.C
import javafx.scene.geometry.*;
import javafx.scene.text.T
import javafx.scene.F
import javafx.scene.FontS
import javafx.scene.transform.T
import javafx.scene.transform.R
import javafx.scene.image.ImageV
import javafx.scene.image.I
import java.util.D
import java.lang.M
import javafx.animation.T
import javafx.animation.KeyF
import javafx.ext.swing.B
title : "Java FX Clock Application"
width : 295
height: 325
closeAction : function (){
java.lang.System.exit(0) ;
visible: true
stage: Stage {
content: Clock{}
public class Clock extends CustomNode {
public attribute radius : Number = 77;
public attribute centerX : Number = 144;
public attribute centerY : Number = 144;
public attribute hours:N
public attribute minutes:N
public attribute seconds:N
public function nextTick () {
var now = new Date();
seconds = now.getSeconds();
minutes = now.getMinutes();
hours = now.getHours();
public function create(): Node {
return Group {
ImageView {
image: Image {
url: "{__DIR__}/clock_background.png"
transform: Translate { x: centerX, y: centerY }
content: [
// code to display the numbers for every third hour
for (i in [3, 6, 9, 12])
transform: Translate { x : -5, y : 5 }
font: Font {size: 16 style: FontStyle.BOLD }
x: radius * (( i + 0 ) mod 2 * ( 2 - i / 3))
y: radius * (( i + 1 ) mod 2 * ( 3 - i / 3))
content: "{i}"
//code to display a circle for the rest of the hours on the clock
for (i in [1..12])
if (i mod 3 != 0 ) then Circle {
transform:Rotate { angle: 30 * i }
centerX: radius
fill: Color.BLACK
} else [ ],
fill: Color.DARKRED
//code for the smaller center circle
fill: Color.DARKRED
//code for the seconds hand
transform: Rotate { angle: bind seconds * 6 }
endY: -radius - 3
strokeWidth: 2
stroke: Color.RED
//code for the hour hand
//for the hour hands
transform: Rotate { angle: bind (hours + minutes / 60) * 30 - 90 }
fill: Color.BLACK
elements: [
MoveTo {x: 4, y: 4},
ArcTo {x: 4 y: -4 radiusX: 1 radiusY: 1},
LineTo{ x: radius - 15
// code for the minutes hand
//for the minutes hand
transform: Rotate { angle: bind minutes * 6 - 90 }
fill: Color.BLACK
elements: [
MoveTo {x: 4, y: 4},
ArcTo {x: 4 y: -4 radiusX: 1 radiusY: 1},
LineTo{ x: radius
var timeline = Timeline {
repeatCount: Timeline.INDEFINITE
keyFrames : [
KeyFrame {
action: function() {
nextTick();
timeline.start();
}
JavaFX Script还是比较简单的。它与Java的差距,比JavaScript与Java的差距,个人感觉小的多。
如何发布JavaFX应用呢?JavaFX内容可以通过Java Web Start发布为应用程序(这将最终运行在用户的Desktop上面),或者发布为Applets作为Java的Plug-In;无论哪种方式,都需要有一个JavaFX runtime.
参考:
Sun:
/software/javafx/index.jsp
Sun为Java FX专题建立的网站,网站本身也是Java FX技术的一个演示。
/
InfoQ:
q.com/news/2008/01/javafx-chet-haase
JavaFX Script:
/software/javafx/script/index.jsp
Clock工程src下载(程序和资源来源于Sun):
描述: Clock工程src
下载次数: 188
浏览: 259925 次
来自: 大西洋底
问题果然解决了,太感谢了
因为不是每个subclass都执行Cloneable吧。
写的不错 这个东西晕死一堆人。
jkleeo 写道很深奥啊.
C/CPP只有在大学的时候听说过 ...
看来你也是四国军棋爱好者,啥时候切磋一下
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'博客访问: 476353
博文数量: 457
注册时间:
认证徽章:
ITPUB论坛APP
ITPUB论坛APP
APP发帖 享双倍积分
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: Linux
  随着计算机的快速发展,编程语言也越来越多,在10年因为开发速度的问题,Java成了编程语言的老大,随着Java不断的臃肿与复杂,开发者也不断的去寻找,尝试各种新的语言,也因近年动态语言有后来居上的趋势,Ruby作为具有动态类型的解释型面向对象语言因此而被开发者热捧。革命的年代已经结束。Ruby从1995年至今已经成熟成为了编程界的主流语言,至少主流在向Ruby前进。
  随着计算机的快速发展,编程语言也越来越多,在10年因为开发速度的问题,Java成了编程语言的老大,随着Java不断的臃肿与复杂,开发者也不断的去寻找,尝试各种新的语言,也因近年动态语言有后来居上的趋势,Ruby作为具有动态类型的解释型面向对象语言因此而被开发者热捧。革命的年代已经结束。Ruby从1995年至今已经成熟成为了编程界的主流语言,至少主流在向Ruby前进。
  当然,在这个充满偏见的语言战争年代,或许是一场无意义的比拼,这是哪个语言都无法回避的。从复杂性问题本身来考虑,为什么说它受到开发者的热捧?首先我们来张国外某博客发起的一次变成语言的投票。
阅读(217) | 评论(0) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。JavaFX本地应用自动更新功能的实现FXLauncher
FX本地应用自动更新功能的实现&&FXLauncher
一、Javapackager介绍
JavaFX已经成为构建现代桌面应用最好的UI框架之一,但是它一直存在部署不方便的问题。Javapackager工具就是针对这个问题的解决方案,正如同JavaFX已经打包进JDK 8中,Javapackager工具也随同JDK 8一同提供。
Javapackager工具使得创建本地应用的安装器很容易,但是很遗憾的是,Javapackager不支持自动更新。而Java Web Start倒是可以支持更新操作,但它不能打包本地应用。
Javapackager工具可以执行针对Java应用程序和JavaFX应用程序的打包和签名的任务。
语法: javapackager command [options]
command包括:
1)-createbss
转换文件为二进制形式
2)-createjar
根据其它参数产生JAR文档
3)-deploy
产生基本的应用程序发布包(可以是自包含的应用程序发布包)
4)-makeall
执行编译,createjar和deploy都会调用它
5)-signjar
根据提供的证书对应用程序签名
二、FXLauncher介绍
FXLauncher工具结合了Javapackager的本地安装器功能和Java Web Start相似的更新机制,使得可以使用FXLauncher而无需本地安装包,以及发布仅有14KB的可运行JAR文件(launcher),通过在线安装方式下载应用的各个模块并保持应用的版本更新。
launcher会先查看应用程序的manifest文件(app.xml)的内容,manifest文件用于在启动时同步本地artifact。
当Manifest被载入时,用户会看到这样的动画:
当应用程序开始更新时,用户会看到这样的动画:
预载入器接着会控制应用程序的过程。launcher看起来是使用CSS配置的。
manifest文件(app.xml)的内容示例:
Updating...
-fx-font-weight:
-fx-pref-width: 200;
-fx-spacing: 10; -fx-padding: 25;
本地安装器不包含任何代码,因此在应用程序发布新版本时无需重建它们,只需简单地复制应用程序的artifact到预定义的位置,FXLauncher会处理剩下的一切工作。
FXLauncher还可以处理多种语言的应用,它与TornadoFX结合起来工作的极好。
FXLauncher和Tornado结合的例子见: https://fxldemo.tornado.no/
三、FXLauncher的使用步骤
1)编译项目JAR到app.dir
2)复制依赖包到app.dir
3)生成app.xml manifest
4)创建本地安装器
5)上传artifact到自动更新仓库
复制部署描述符,并按自己的需求进行修改:
${project.name}
no.tornado.FxlDemo
${project.build.directory}/app
${project.build.directory}/installer
https://fxsamples.tornado.no/demo/
w48839@fxldemo.tornado.no:fxldemo
四、Maven目标
1、产生应用程序
mvn clean package
2、部署应用程序artifact到自己的Web服务器
mvn exec:exec@deploy-app
3、建立本地安装器
mvn exec:exec@installer
五、TornadoFX介绍
TornadoFX是针对Kotlin语言的轻量级JavaFX框架。TornadoFX的特性包括:
1)依赖注入
2)类型安全建立器
3)异步任务执行
5)极度轻量级
6)小巧简单的API
7)为模型对象提供的REST客户端
8)零配置,无需XML,无需注释
/edvin/tornadofx
Tornado的Maven依赖:
no.tornadoRIA之争 JavaFX是否能后来居上?
 作者: IT168 Michelle编译 编辑:
& 【IT168 评论】在RIA领域,Sun显然是后来者,其JavaFX的发布落后于Adobe的Flex及微软的Silverlight很长时间,因此,JavaFX的命运自然也受到了大家的关注。有些人直言不讳的指出,JavaFX出现得太晚了,就算它是个好东西,可是Flex和Silverlight在这一领域已取得的成就几乎是不可撼动的。& 另一些人则认为JavaFX在千呼万唤出来之后,并没有使人眼前一亮,与Flex和Silverlight相比,它并没有什么出彩的东西。还有人干脆认为Sun这是在不务正业,简直就是捡了芝麻丢了西瓜,JavaFX甚至于Sun的前途都实在是令人担忧。& 然而,就在不少人不断唱衰JavaFx的时候,却传来了JavaFX下载量突破1亿的消息。这几个月来,JavaFX又发生了什么呢?除了Sun宣布发布JavaFX Mobile之外,就是Jonathan的博客宣布Sun会构建一个完全基于JavaFX的Java应用程序商店,就像Apple的App Store一样。这个商店会为所有Java设备,从终端和电脑桌面,带来无限的可能。& 但似乎社区对于JavaFX的反应并没有Sun自己那样乐观。在一次对网友调查中,投票结果显示网友对于JavaFX的未来有着明确的观点,超过一半的人都选择了&JavaFX不可能得到广泛的使用&。单个投票选项能获得超过一半以上的人数,这在该社区站点最近发起的几次投票中实属罕见。& 这样的投票结果显示了两个阵营的态度,而不是一边倒的局面。大家如此热议此事,这就说明JavaFX在获得越来越多人的关注并引起他们的兴 趣。尽管有一半的人把票投给了&它永远都不可能得到广泛应用&,但仍有30%的人认为JavaFX在未来能成为可靠的 技术,甚至有六分之一的人认为JavaFX会在将来成为主导技术,这对于一门产生在已经极具竞争性的领域中的崭新技术来说,很是难能可贵了。& 时间也许真的会站在JavaFX一边,就像James Sugrue最近在他的文章&JavaFX:我开始相信&里说的:& 新技术总要花费一些时间来证明自己,JavaFX也不例外。虽然还是会有一些负面新闻,但随着使用JavaFX的案例增加,我开始相信它迟早会取得Java开发者心目中的一席之地。& 不管怎样,现在看JavaFX的历史还很简短。在Scott Hanselman对于来自Sun JavaFX开发团队的Joshua Marinacci的采访podcast中,你可以看到JavaFX人自有的观点,他很清楚JavaFX面临的竞争,也比任何人都明白JavaFX的优势和潜能在哪里。
IT168企业级}

我要回帖

更多关于 后来居上将军你被潜了 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信