添加上下文菜单以启用打印功能
通常情况下,您可以将打印命令添加到应用程序菜单或将打印功能分配给工具栏按钮之一。在WebViewSample应用程序中,工具栏已经有很多控件,因此您可以通过右键单击来添加打印命令的上下文菜单。 示例9-1显示了一个代码片段,该代码片段将带有打印命令的上下文菜单添加到应用程序工具栏中。
示例9-1 创建工具栏上下文菜单
//添加上下文菜单 final ContextMenu cm = new ContextMenu(); MenuItem cmItem1 = new MenuItem("打印"); cm.getItems().add(cmItem1); toolBar.addEventHandler(MouseEvent.MOUSE_CLICKED, (MouseEvent e) -> { if (e.getButton() == MouseButton.SECONDARY) { cm.show(toolBar, e.getScreenX(), e.getScreenY()); } });
当您将来自示例9-1的代码片段添加到WebViewSample应用程序中并运行它时,右键单击工具栏,将显示打印上下文菜单,如图9-1所示。
处理打印作业
在应用程序UI中添加打印上下文菜单后,您可以定义打印操作。首先,您必须创建一个PrinterJob
对象。然后,您调用WebEngine.print
方法,将打印作业作为参数传递,如示例9-2所示。
示例9-2 调用WebEngine.print方法
//处理打印作业 cmItem1.setOnAction((ActionEvent e) -> { PrinterJob job = PrinterJob.createPrinterJob(); if (job != null) { webEngine.print(job); job.endJob(); } });
重要的是要检查非空打印作业,因为如果系统中没有可用的打印机,createPrinterJob
方法将返回null
。
请参考示例9-3,评估启用了打印功能的WebViewSample应用程序的完整代码。
示例 9-3 启用打印功能的 WebViewSample
//添加上下文菜单 final ContextMenu cm = new ContextMenu(); MenuItem cmItem1 = new MenuItem("打印"); cm.getItems().add(cmItem1); toolBar.addEventHandler(MouseEvent.MOUSE_CLICKED, (MouseEvent e) -> { if (e.getButton() == MouseButton.SECONDARY) { cm.show(toolBar, e.getScreenX(), e.getScreenY()); } }); //处理打印任务 cmItem1.setOnAction((ActionEvent e) -> { PrinterJob job = PrinterJob.createPrinterJob(); if (job != null) { webEngine.print(job); job.endJob(); } });
为了扩展WebViewSample应用程序的打印功能,可以使用javafx.print包中提供的类。
在JavaFX应用程序中,可以使用TabPane类实现浏览器选项卡,并在用户添加新选项卡时创建一个新的WebView对象。
为了进一步增强这个应用程序,可以应用效果、变换和动画过渡。还可以在应用程序场景中添加更多的WebView实例。
有关可用功能的更多信息,请参阅JavaFX API文档和JavaFX CSS规范。您还可以学习JavaFX in Swing教程,了解如何在现有的Swing应用程序中添加WebView组件。
相关API文档
-
WebView
-
WebEngine
-
WebHistory
-
Region
-
Hyperlink
-
Worker