文档



JavaFX:向JavaFX应用程序添加HTML内容

8 管理Web历史记录

本章介绍了WebHistory类,并教授如何获取和显示已访问页面的URL。

您可以使用WebHistory类获取已访问页面的列表。它表示与WebEngine对象关联的会话历史记录。使用WebEngine.getHistory()方法获取特定Web引擎的WebHistory实例,如下所示:WebHistory history = webEngine.getHistory();

历史记录基本上是一个条目列表。每个条目表示一个已访问页面,并提供访问相关页面信息,如URL、标题和页面最后访问日期。可以使用getEntries()方法获取列表。

随着用户在Web上导航,历史记录列表会发生变化。使用ObservableList API来处理这些变化。

获取访问页面列表

通常使用标准或自定义的UI控件来显示历史记录列表。示例8-1展示了如何获取历史记录项并在ComboBox控件中展示它们。

示例8-1 获取和处理Web历史记录项列表

final WebHistory history = webEngine.getHistory();
history.getEntries().addListener(new 
    ListChangeListener<WebHistory.Entry>() {
        @Override
        public void onChanged(Change<? extends Entry> c) {
            c.next();
            for (Entry e : c.getRemoved()) {
                comboBox.getItems().remove(e.getUrl());
            }
            for (Entry e : c.getAddedSubList()) {
                comboBox.getItems().add(e.getUrl());
            }
        }
    }
);
         
comboBox.setPrefWidth(60);
comboBox.setOnAction(new EventHandler<ActionEvent>() {
    @Override
    public void handle(ActionEvent ev) {
        int offset =
                comboBox.getSelectionModel().getSelectedIndex()
                - history.getCurrentIndex();
        history.go(offset);
    }
});

ListChangeListener对象跟踪历史记录项的更改,并将相应的URL添加到组合框中。

当用户在组合框中选择任何项时,Web引擎将导航到由历史记录项定义的URL,该项在列表中的位置由offset值定义。负的offset值指定当前项之前的位置,正的offset值指定当前项之后的位置。

示例8-2展示了修改后应用程序的完整代码。

示例8-2 带有历史记录下拉框的WebViewSample

final ComboBox comboBox = new ComboBox();
comboBox.setPrefWidth(60);
toolBar.getChildren().add(comboBox);
//处理历史记录
final WebHistory history = webEngine.getHistory();
history.getEntries().addListener(
(ListChangeListener.Change<? extends WebHistory.Entry> c) -> {
c.next();
c.getRemoved().stream().forEach((e) -> {
comboBox.getItems().remove(e.getUrl());
});
c.getAddedSubList().stream().forEach((e) -> {
comboBox.getItems().add(e.getUrl());
});
});
//设置历史记录下拉框的行为
comboBox.setOnAction((Event ev) -> {
int offset
= comboBox.getSelectionModel().getSelectedIndex()
- history.getCurrentIndex();
history.go(offset);
});

当您编译和运行应用程序时,它会产生如图8-1所示的窗口。

图8-1 从历史记录下拉框中选择URL

图8-1的描述
"图8-1 从历史记录下拉框中选择URL"的描述

关闭窗口

目录

JavaFX: 将HTML内容添加到JavaFX应用程序中

展开 折叠