Using JavaFX UI Controls 18 超链接

原网页地址:http://docs.oracle.com/javafx/2/ui_controls/hyperlink.htm#CIHGADBG

这一章讲述用来将文本转换为超链接的 Hyperlink 组件

Hyperlink 类 是 Labeled
类的另一种形式。

图18-1 展示了默认超链接实现的3中状态

图 18-1 超链接组件的3中状态

创建一个超链接

例 18-1 中展示创建超链接的代码片段

<em>例18-1 典型的超链接
</em>Hyperlink link = new Hyperlink();
link.setText("http://example.com");
link.setOnAction(new EventHandler<ActionEvent>() {
    @Override
    public void handle(ActionEvent e) {
        System.out.println("This link is clicked");
    }
});

setText 成员方法用来定义
超链接的标题。

因为 Hyperlink
 类是Labeled类的一个拓展,你可以为标题设置特定的字体和文字。

setOnAction 方法用来指定超链接点击时的行为。类似于Button的
onAction动作。

例 18-1, 中行为仅限于打印字符串。但是在你的应用里面,你可能想用来实现更常见的任务。

链接本地内容

在图18-2展示应用中从本地目录中渲染图片

图 18-2 显示图片

展示例 18-2的源代码:

例 18-2利用超链接浏览图片

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.*;
import javafx.scene.control.*;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class Main extends Application {

    final static String[] imageFiles = new String[]{
        "product.png",
        "education.png",
        "partners.png",
        "support.png"
    };
    final static String[] captions = new String[]{
        "Products",
        "Education",
        "Partners",
        "Support"
    };
    final ImageView selectedImage = new ImageView();
    final ScrollPane list = new ScrollPane();
    final Hyperlink[] hpls = new Hyperlink[captions.length];
    final Image[] images = new Image[imageFiles.length];

    public static void main(String[] args) {
        Application.launch(args);
    }

    @Override
    public void start(Stage stage) {
        Scene scene = new Scene(new Group());
        stage.setTitle("Hyperlink Sample");
        stage.setWidth(300);
        stage.setHeight(200);

        selectedImage.setLayoutX(100);
        selectedImage.setLayoutY(10);

        for (int i = 0; i < captions.length; i++) {
            final Hyperlink hpl = hpls[i] = new Hyperlink(captions[i]);
            final Image image = images[i] = new Image(
                getClass().getResourceAsStream(imageFiles[i])
            );
            hpl.setOnAction(new EventHandler<ActionEvent>() {
                @Override
                public void handle(ActionEvent e) {
                    selectedImage.setImage(image);
                }
            });
        }

        final Button button = new Button("Refresh links");
        button.setOnAction(new EventHandler<ActionEvent>() {
                @Override
                public void handle(ActionEvent e) {
                    for (int i = 0; i < captions.length; i++) {
                        hpls[i].setVisited(false);
                        selectedImage.setImage(null);
                    }
                }
            });

        VBox vbox = new VBox();
        vbox.getChildren().addAll(hpls);
        vbox.getChildren().add(button);
        vbox.setSpacing(5);

        ((Group) scene.getRoot()).getChildren().addAll(vbox, selectedImage);
        stage.setScene(scene);
        stage.show();
    }
}<em>
</em>

程序通过for循环创建4个Hyperlink ,用户点击某个链接是将触发此超链接setOnAction方法里定义的行为的动作。 因此图片数组中的对应的图片设置到selectedImage 变量中。当用户点击一个超链接,超链接将显示被访问过。你可以通过调用setVisited 方法来刷新超链接。

18-3
的代码片段即实现了该任务。

例18-3
刷新超链接

final Button button = new Button("Refresh links");
button.setOnAction(new EventHandler<ActionEvent>() {
    @Override
    public void handle(ActionEvent e) {
       for (int i = 0; i < captions.length; i++) {
           hpls[i].setVisited(false);
           selectedImage.setImage(null);
       }
    }
});

正如图18-3所示,当点击刷新按钮后,所有的的超链接都被设置为未访问状态。

18-3
未访问过的超链接

因为Hyperlink 
类拓展自Labeled 类,你不仅可以指定标题的文字还为其设置一张图片。下一节的程序将展示既使用标题也使用图片来创建超链接和加载远程html页面。

链接远程内容

在你的JavaFx程序中,通过嵌入WebView 浏览器组件来渲染
HTML内容。WebView 组件提供浏览网页的基本功能。该组件可以渲染网页支持用户和链接的交互也可以执行JavaScript代码。

学习18-4的源码。它创建了4个带标题和图片的超链接。当点击其中一个超链接时,对应的值作为URL传给镶嵌的浏览器。

例 18-4
加载远程网页

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.*;
import javafx.scene.control.*;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Priority;
import javafx.scene.layout.VBox;
import javafx.scene.text.Font;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;

public class Main extends Application {

    final static String[] imageFiles = new String[]{
        "product.png",
        "education.png",
        "partners.png",
        "support.png"
    };
    final static String[] captions = new String[]{
        "Products",
        "Education",
        "Partners",
        "Support"
    };

    final static String[] urls = new String[]{
        "http://www.oracle.com/us/products/index.html",
        "http://education.oracle.com/",
        "http://www.oracle.com/partners/index.html",
        "http://www.oracle.com/us/support/index.html"
    };

    final ImageView selectedImage = new ImageView();
    final Hyperlink[] hpls = new Hyperlink[captions.length];
    final Image[] images = new Image[imageFiles.length];   

    public static void main(String[] args){
        launch(args);
    }

    @Override
    public void start(Stage stage) {
        VBox vbox = new VBox();
        Scene scene = new Scene(vbox);
        stage.setTitle("Hyperlink Sample");
        stage.setWidth(570);
        stage.setHeight(550);

        selectedImage.setLayoutX(100);
        selectedImage.setLayoutY(10);

        final WebView browser = new WebView();
        final WebEngine webEngine = browser.getEngine();

        for (int i = 0; i < captions.length; i++) {
            final Hyperlink hpl = hpls[i] = new Hyperlink(captions[i]);

            final Image image = images[i] =
                    new Image(getClass().getResourceAsStream(imageFiles[i]));
            hpl.setGraphic(new ImageView (image));
            hpl.setFont(Font.font("Arial", 14));
            final String url = urls[i];

            hpl.setOnAction(new EventHandler<ActionEvent>() {
                @Override
                public void handle(ActionEvent e) {
                    webEngine.load(url);
                }
            });
        }

        HBox hbox = new HBox();
        hbox.getChildren().addAll(hpls);

        vbox.getChildren().addAll(hbox, browser);
        VBox.setVgrow(browser, Priority.ALWAYS);

        stage.setScene(scene);
        stage.show();
    }
}

类似例18-2超链接通过for循环进行创建。为超链接设置行为传递给urls数组对应的URL地址给嵌套在浏览器WebEngine 对象。

当编译运行此程序,程序窗体将显示如图18-4的状况。

图18-4
从Oracle
公司网址加载页面

时间: 2024-08-02 18:40:02

Using JavaFX UI Controls 18 超链接的相关文章

Using JavaFX UI Controls 12 Table View

原文链接地址:http://docs.oracle.com/javafx/2/ui_controls/table-view.htm#CJAGAAEE 在这一章,你将学习如:添加一个表格表.数据填充.编辑表格行等格组件 JavaFx的基本操作. 很多JavaFX SDK API种的类为在表格表单中呈现数据.在JavaFX 应用中对创建表格最重要的是TableView, TableColumn和TableCell这三个类. 你可以通过实现数据模型(data model) 和 实现  单元格工厂(ce

[译]JavaFX 2.0+ - 使用JavaFX UI控件

使用JavaFX UI控件 本教程涵盖了JavaFX API中内置的UI控件. 文档包含以下章节: 标签 按钮 单选按钮 开关按钮 复选框 选择框 文本字段 密码字段 滚动条 滚动面板 列表 表格 树 树形表格 下拉列表框 分隔符 滑块 进度条,进度指示器 超链接 提示 HTML编辑器 标题面板和手风琴 菜单 颜色选择器 日期选择器 分页控制 文件选择器 如何定制控件 嵌入式平台的支持 每一章提供了代码示例和应用程序来展示控件是如何显示和工作的. 你可以从目录中找到应用程序的源文件和相应的Net

MVC UI controls plugin---(1) Asp.net Awesome - jquery ajax helpers

一,Awesome Jquery Ajax helpers 1) Codeplex links http://awesome.codeplex.com/ 2) Study links http://aspnetawesome.com/learn/mvc/AjaxDropdown#Binding-to-parents-/-Cascading MVC UI controls plugin---(1) Asp.net Awesome - jquery ajax helpers

JavaFX - UI控件 - 标签

  2标签(Label) 本章主要介绍如何使用标签(Label),该类位于JavaFX API的javafx.scene.control包中,用于显示一个文本元素. 接下来会介绍如何让文本元素自动换行来适应受限空间,添加一个图标,或使用视觉特效. 图2 - 1显示了标签的三种常见用法. 左边的标签是一个带图标的文本,中间的展示了旋转效果,右边的使用了自动换行设置. 图2 - 1 标签示例 这幅图显示了三个标签,他们被放在了同一行. 左边的标签有一个看起来像个放大镜的图标和一个"Searc

JavaFx学习之道:JavaFx初步了解

因为项目的需要,实在是没有办法了,试了很多种方案(RCP,SWT,Flex,Smartinvoke...),最终还是决定开始研究JavaFx...为了给用户更好地体验我们的"智能家居"! 以下是最近搜索得到的一些资料: 1.Oracle 上 JavaFx的下载页面:http://www.oracle.com/technetwork/java/javafx/overview/index.html 目前最新版本的SDK是2.1 JavaFX 2.1 Developer Preview -

JavaFX学习之路:详细解释JavaFX架构和框架

JavaFX 2.0平台是基于Java技术的富client平台.它使应用程序开发人员更加easy的开发和部署跨平台的富互联网应用(RIA).JavaFX 2.0文档包括了JavaFX 2.0所提供的功能的概述. 图1描写叙述了JavaFX 2.0平台的架构组件.后面的部分将对每个组件进行逐一的描写叙述. 在JavaFX通用API的以下是用来执行JavaFX代码的引擎.这个引擎包含以下子组件:JavaFX高性能图形引擎(Prism);新的更小但更有效率的窗口系统(Glass);媒体引擎和Web引擎

JavaFx初探

由于项目的须要,实在是没有办法了,试了非常多种方案(RCP,SWT,Flex,Smartinvoke...),终于还是决定開始研究JavaFx...为了给用户更好地体验我们的"智能家居"! 下面是近期搜索得到的一些资料: 1.Oracle 上 JavaFx的下载页面:http://www.oracle.com/technetwork/java/javafx/overview/index.html 眼下最新版本号的SDK是2.1 JavaFX 2.1 Developer Preview

JavaFX学习之道:详解JavaFX架构与框架

JavaFX 2.0平台是基于Java技术的富客户端平台.它使应用程序开发者更加容易的开发和部署跨平台的富互联网应用(RIA).JavaFX 2.0文档包含了JavaFX 2.0所提供的功能的概述. 图1描述了JavaFX 2.0平台的架构组件.后面的部分将对每一个组件进行逐一的描述.在JavaFX通用API的下面是用来运行JavaFX代码的引擎.这个引擎包括以下子组件:JavaFX高性能图形引擎(Prism);新的更小但更有效率的窗体系统(Glass);媒体引擎和Web引擎.虽然这些组件不是包

JavaFX学习之道:File Chooser

This chapter explains how to use the FileChooser class to enable users to navigate the file system. The samples provided in this chapter explain how to open one or several files, configure a file chooser dialog window, and save the application conten