javaFX 学习之 超链接(HyperLink) 转载

原文链接  
 

HyperLink控件,它用于将文本格式化为超链接

Hyperlink类是另一种Labeled控件

超链接的三种状态

Hyperlink控件的三种状态

创建一个Hyperlink

典型的Hyperlink

Hyperlink link = new Hyperlink();
link.setText("http://example.com");
link.setOnAction((ActionEvent e) -> {
    System.out.println("This link is clicked");
}); 

setText方法定义了定义了超链接的文本标题。因为Hyperlink类是Labeled类的一个扩展,所以你可以为超链接设置特定的字体和文本填充颜色。setOnAction方法会设置一个特定的动作(Action),该Action会在超链接被单击时调用,这与Button控件中此方法的功能类似

链接到本地内容

import javafx.application.Application;
import javafx.event.ActionEvent;
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 HyperLinkLocal extends Application {

    final static String[] imageFiles = new String[]{//图片路径静态数组
            "folder_16.jpg",
            "folder_16.jpg",
            "folder_16.jpg",
            "folder_16.jpg"
    };
    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((ActionEvent e) -> {
                selectedImage.setImage(image);//图片视图区域更换图片
            });//超级链接对象鼠标点击事件处理回调函数
        }

        final Button button = new Button("Refresh links");//按钮的创建
        button.setOnAction((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();//舞台展现
    }
}

此程序在一个for循环中创建了四个Hyperlink对象。每个超链接都通过setOnAction定义了当用户点击时会触发的行为。在这种情况下,images数组中对应的图片会被设置给selectedImage变量 

 当用户点击超链接时,超链接会变成被访问过的状态。你可以使用Hyperlink类的setVisited方法来刷新链接

由于Hyperlink类是Labeled类的一个扩展,因此你除了可以设定文本标题超链接,还可以设置图片超链接。下面示例程序将会同时使用文本和图片超链接,并且会加载远程的HTML页面 

链接到远程内容 

在JavaFX应用程序中你可以通过在程序场景(Scene)中嵌入WebView浏览器来展示HTML内容。WebView组件提供了基本的Web页面浏览功能。它会对Web页面进行渲染并支持用户交互,例如链接导航、JavaScript指令执行等 

下列程序:

创建了四个带有文本和图片的超链接。当一个超链接被点击时,对应的值会作为URL传递给嵌入的浏览器 (WebView类型对象)

超链接在for循环中被创建。在为每个超链接设置的Action中,将一个从urls数组中取出的URL传递给了表示内嵌浏览器的WebEngine对象 

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.geometry.Pos;
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 HyperLinkWithWebView extends Application {

    final static String[] imageFiles = new String[]{//本地图片名称数组
            "folder_16.jpg",
            "folder_16.jpg",
            "folder_16.jpg",
            "folder_16.jpg"
    };
    final static String[] captions = new String[]{//标题字样字符串数组
            "oracle",
            "Education",
            "Partners",
            "Support"
    };

    final static String[] urls = new String[]{//超级链接url数组
            "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("超级链接示例");
        stage.setWidth(570);//舞台宽度设置
        stage.setHeight(550);//舞台高度设置

        selectedImage.setLayoutX(100);//图片视图区域x轴坐标设置
        selectedImage.setLayoutY(10);//图片视图区域y轴坐标设置

        final WebView browser = new WebView();//创建WebView类型嵌入式浏览器对象
        final WebEngine webEngine = browser.getEngine();//获取WebEngine类型web引擎对象

        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];//设置url值

            hpl.setOnAction((ActionEvent e) -> {//超级链接对象的鼠标点击事件处理回调函数
                webEngine.load(url);//web引擎加载http类型url对应的web资源
            });
        }

        HBox hbox = new HBox();//创建水平盒子布局器
        hbox.setAlignment(Pos.BASELINE_CENTER);//设置水平盒子对象中的被布局元素的对齐方式
        hbox.getChildren().addAll(hpls);//水平盒子布局对象上添加超级链接
        vbox.getChildren().addAll(hbox, browser);//垂直盒子布局对象上添加水平盒子布局对象和WebView类型浏览器对象
        VBox.setVgrow(browser, Priority.ALWAYS);

        stage.setScene(scene);//舞台设置场景
        stage.show();//舞台展现
    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值