标签(Labels)
JavaFX Label类支持HTML内容。使用Label您可以使用HTML和CSS创建样式文本和图像,非常类似于典型的Web应用。此外,通过使用JavaFX嵌入表达式,您可以在Swing应用中象Web页面作者使用类似JSTL或Velocity工具一样创建动态的HTML内容。
考虑以下虚拟购物车示例:
import javafx.ui.*; class Item { attribute id: String; attribute productId: String; attribute description: String; attribute inStock: Boolean; attribute quantity: Number; attribute listPrice: Number; attribute totalCost: Number; } attribute Item.totalCost = bind quantity*listPrice; class Cart { attribute items: Item*; attribute subTotal: Number; } operation sumItems(itemList:Item*) { var result = 0.00; for (item in itemList) { result += item.totalCost; } return result; } attribute Cart.subTotal = bind sumItems(items); var cart = Cart { items: [Item { id: "UGLY" productId: "D100" description: "BullDog" inStock: true quantity: 1 listPrice: 97.50 }, Item { id: "BITES" productId: "D101" description: "Pit Bull" inStock: true quantity: 1 listPrice: 127.50 }] }; Frame { content: Label { text: bind "<html> <h2 align='center'>Shopping Cart</h2> <table align='center' border='0' bgcolor='#008800' cellspacing='2' cellpadding='5'> <tr bgcolor='#cccccc'> <td><b>Item ID</b></td> <td><b>Product ID</b></td> <td><b>Description</b></td> <td><b>In Stock?</b></td> <td><b>Quantity</b></td> <td><b>List Price</b></td> <td><b>Total Cost</b></td> <td> </td> </tr> { if (sizeof cart.items == 0) then "<tr bgcolor='#FFFF88'><td colspan='8'><b>Your cart is empty.</b></td></tr>" else foreach (item in cart.items) "<tr bgcolor='#FFFF88'> <td>{item.id}</td> <td>{item.productId}</td> <td>{item.description}</td> <td>{if item.inStock then "Yes" else "No"}</td> <td>{item.quantity}</td> <td align='right'>{item.listPrice}</td> <td align='right'>{item.totalCost}</td> <td> </td> </tr>" } <tr bgcolor='#FFFF88'> <td colspan='7' align='right'> <b>Sub Total: ${cart.subTotal}</b> </td> <td> </td> </tr> </table> </html>" } visible: true }
运行以上程序,显示如下:
如果您编程删除购物车内容:
delete cart.items;
您将看到如下内容:
在以上示例中,内嵌的JavaFX表达式(粗体显示)动态创建HTML表格列和表格单元的内容。当这些表达式依赖的对象有变化时,Label的HTML内容将自动更新。
以上示例还非常有趣,因为其演示了使用表达式定义属性值的用法。Item类的totalCost属性和Cart类的subTotal属性被绑定为表达式以计算它们的值。任何时候这些表达式的依赖对象发生变化,属性值将被自动重新计算并更新。考虑在电子表格中,某些单元格包含指向其他单元格的表达式,当您在这些其他单元格输入数据,包含依赖它们的表达式的单元格值也被自动更新了。
HTML中的图像
JavaFX Label类实际上封装了一个特殊的JEditPane,该JEditorPane使用一个支持用Java类转载器从JAR文件中载入图像的共享图像缓存。因此,您可以就像普通的文件URL一样使用HTML的<img>元素引用您的应用的图像资源包。
超链接
Label类同样支持HTML超链接,内嵌一个特殊的URL给HTML<a>元素的href属性。
这样的URL使用JavaFX #操作符创建,该操作符生成一个字符串化对象引用(Stringified Object Reference)指向后续可以被JavaFX复引用的操作对象。?操作符,例如:
var a = 20;var b = #a;assert b instanceof String; // 通过var c = (Number) ?b;assert a == c; // 通过
Label类的HTML显示器认识诸如HTML的<a href=url>这样的URL,使用URL来响应元素的鼠标点击,并且如果URL值指向一个函数或操作的话,它可以调用该函数或操作。
例如,以下是使用带超链接标签代替按钮的前面按钮点击示例的重写版本:
import javafx.ui.*;import java.lang.System; class ButtonClickModel { attribute numClicks: Number;} var model = new ButtonClickModel(); var win = Frame { width: 300 height:200 menubar: MenuBar { menus: Menu { text: "File" mnemonic: F items: MenuItem { text: "Exit" mnemonic: X accelerator: { modifier: ALT keyStroke: F4 } action: operation() { System.exit(0); } } } } content: GridPanel { border: EmptyBorder { top: 30 left: 30 bottom: 30 right: 30 } rows: 2 columns: 1 vgap: 10 cells: [Label { text: bind "<html> <a href='{#(operation() {model.numClicks++;})}'> I'm a hyperlink! </a> </html>" }, Label { text: bind "Number of button clicks: {model.numClicks}" }] } visible: true};
以上示例中粗体的表达式创建一个新的递增model的numClicks属性的操作。使用#操作符生成后续将被键入到HTML标记中的指向该操作的URL。
运行该程序,显示如下:
点击超链接两次后,显示如下:
分享到:
相关推荐
3. **JavaFX源代码编辑**:e(fx)clipse提供了对FXML文件的支持,这是JavaFX界面布局的主要方式。它可以自动识别FXML文件中的元素并提供代码补全功能,方便开发者编写控制器类。 4. **Scene Builder集成**:Scene ...
将Sun的官方教程整理成PDF文件,方便查看
### JavaFX Script编程语言概述与核心概念 #### JavaFX Script简介 JavaFX Script是一种用于创建具有流畅用户界面的应用程序的动态编程语言。该语言由Sun Microsystems开发,旨在为Java平台带来更加直观、高效的...
Eclipse Plugin for JavaFX Start building JavaFX applications on Eclipse with the JavaFX plugin for Eclipse IDE 3.4 or newer.
"安装Eclipse的JavaFX插件" 在本篇文章中,我们将详细介绍如何安装Eclipse的JavaFX插件,以便开发者更好地使用JavaFX开发工具。下面是安装步骤的详细解释: 首先,需要下载最新版本的Eclipse 4.5 SDK,这是安装...
在JavaFX官方网站看见的。目前还是beta版本! JavaFX Plugin for Eclipse was started in December 2008, is owned by mryzl, and has 15 members.
Eclipse 4与JavaFx开发教程是一份旨在指导开发者如何在Eclipse 4环境下集成JavaFx以及搭建基础开发环境的教材。本教程详细阐述了如何利用e(fx)clipse插件,一个专为Eclipse开发的JavaFx集成解决方案,进行开发和调试...
JRE 8 + JAVAFX + scenebuilder已经被作者配置好并压缩至压缩包中,不需要额外配置环境(包括下载scenebuilder和在eclipse中下载JAVAFX),但gson安装包需要额外配置,这方面老师应该会讲。使用此压缩包只要打开...
JavaFX Script 编程语言入门教程 JavaFX Script 编程语言是 Java 多媒体技术方面的应用,设计 JavaFX 入门编程。 JavaFX Script 编程语言基于 Java 平台,因此要求在系统上安装 JDK 5 或 JDK 6(6 更快)。在开始...
Lesson 1: Getting Started with JavaFX Script Lesson 1将指导您学习JavaFX脚本语言的基础知识,例如变量声明、数据类型、操作符等。 Step 1: 下载并安装JDK JavaFX脚本语言需要JDK 5或JDK 6支持,请下载并安装...
在配置javafx之前,需要到Oracle或openJFX的官网下载javafx压缩包并解压,解压路径最好和Java的jdk放在同一目录方便寻找,在下载解压javafx包之后,开始配置javafx项目: 一:eclipse如何配置javafx 1.安装e(fx)...
JavaFx的主要组件包括Script和Mobile两个部分,Script是用于开发桌面应用程序的组件,而Mobile是为移动设备开发Java应用的平台。JavaFx的特点是能够在Java虚拟机上运行,不需要浏览器支持,可以在支持Java的PC和手机...
【标题】中的“基于JavaFX的迷宫小游戏 Java 、Eclipse 、JavaFX.zip”表明这是一个使用Java编程语言,借助Eclipse IDE和JavaFX图形库开发的迷宫游戏项目。JavaFX是一个用于构建桌面应用、移动应用和网页应用的富...
JavaFX Script 提供了一系列高级特性,如第一级函数、声明式的语法结构、列表推导以及基于依赖关系的增量式求值,这些都使得GUI应用的开发变得更加高效和直观。 #### 第一级函数与列表推导 JavaFX Script 支持第一...
设置好开发环境后,你可以使用IDEA或Eclipse等集成开发环境,安装对应的JavaFX插件来方便地进行开发。 在JavaFX中,你可以使用FXML(FXML Language)来描述用户界面的结构,或者直接用Java代码创建和操作节点。例如...
OpenJDK8 with JavaFX 是一个开放源代码的Java开发工具包,它包含了Java标准版(Java SE)的实现,以及JavaFX库。OpenJDK是Oracle JDK的开源替代品,由OpenJDK社区维护和开发,而JavaFX是构建桌面、移动和Web应用...
【作品名称】:基于JavaFX的迷宫小游戏 Java 、Eclipse 、JavaFX(答辩 PPT+源码) 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 ...
5. 创建JavaFX项目:使用Eclipse新建JavaFX项目,并配置项目结构,包括创建Model-View-Controller (MVC)三个主要部分的包结构。MVC是一种设计模式,有助于分离应用程序的数据、视图和控制逻辑。 6. FXML布局文件:...
- **第三步:安装 JavaFX Scene Builder** - 双击下载的 `.msi` 文件开始安装过程。 - 选择合适的安装路径,一般情况下默认设置即可。 - 安装完成后,可以在指定目录找到 JavaFX Scene Builder 的可执行文件。 -...