2 DJ Native Swing这个效果也不错,我捣鼓了半天,就是使用起来很麻烦,它的很多功能不符合我的预期,没办法在netbeans中拖拽使用
3 JxBrowser这个浏览器组件非常好用,但它是商业版的,网上已有破解方法。缺点就是,这个组件长时间不 *** 作,会莫名其妙地卡死,偶尔还会报各种channel异常错误,我始终没解决这个问题,而且所依赖的jar太大,大概100多M。
Swing与Javafx的对比
在Swing图形工具包中,JFrame是一个顶层容器,JPanel是一个中间容器,JPanel上面可以放置各种Button按钮、Label标签等图形控件。有一个很形象的比喻,JFrame是一张桌子,各个组件是一盘又一盘的菜,而JPanel就是一个托盘,装了选好的菜品(组件)后放到JFrame桌子上。一个JFrame界面上可以有多个JPanel用来划分不同的区域。
在Javafx中,顶级容器是舞台Stage,也就是软件的界面窗口;Scene场景为中间容器,各种组件Button、Label成为Node节点,Node节点必须放在Scene场景中。
Swing添加Javafx的webview组件
Netbeans没法拖拽JFXPanel,那么我们可以这样,在JFrame上先放一个JPanel,然后手动敲代码在JPanel上添加一个JFXPanel,JFXPanel上放一个scene场景,在其上面放一个Javafx的webview组件,具体看如下 *** 作:
JFrame-->JPanel-->JFXPanel-->scene-->webview,需要手写的代码量很少。具体 *** 作如下:
1. netbeans拖拽画出一个JFrame窗口。
2. 在JFrame图形界面上,想要实现浏览器组件的位置放一个JPanel。
0d2948bc3de3cdeb518b92f4e3313ed2.png
3. 手动敲代码,在JPanel上面放置一个JFXpanel,然后载入一个场景。
4. 手动敲代码,在JFXPanel上放置一个webview控件。
613f757c51996c6beff242858adce564.png
如下图所示,浏览器稳定运行。
通常来说,选择Web应用还是原生应用来开发是一种在通用性和本地权限之前的权衡。WebApp兼容的范围很广,而且Web前端代码基于浏览器天生跨平台,而且前端框架多好开发。而原生应用有很大本地权限,可以进行各种文件和 *** 作系统接口的调用。WebView可以结合这两者的优点进行开发。WebView2允许你在本地App里面嵌入web相关的技术(例如HTML,CSS和JavaScript)。WebView2控件使用微软的Edge作为渲染引擎,你可以嵌入一部分或者整个App都用WebView来做。微软还有一个类似的出得更早框架是CEFSharp,这个但是下载依赖要稍繁琐,具体可以看我这篇文章。
使用WebView2的优势
可以运用Web的生态和技术库。Web前端的各种库,工具都可以直接套用来开发界面。
开发得更
Windows 7,8,10都支持。
本地应用API。可以调用完整的本地API。
代码复用。代码库中的前端代码可以跨平台重用。
微软支持。这个插件这是有微软持续更新的GA版本,支持.NET FrameWork 4.7.2以后的版本、.NET Core、Win32 C/C++,.NET 5,.NET 6,WinUI 2.0/3.0。
带内核更新的部署。依赖于定期更新和修复漏洞的Choromium内核。
固定版本内核部署。可以选一个固定的Choromium版本部署WebView2。
采用增量。可以逐步将网页逐个添加或替换到你的应用中。
使用WebView的步骤
1.首先安装WebView2 运行时或者Microsoft Edge Insider(安装Beta版最稳定):
https://developer.microsoft.com/zh-cn/microsoft-edge/webview2/#download-section
https://www.microsoftedgeinsider.com/zh-cn/download
2.创建一个WinForm项目(Win32,WinUI,WPF,UWP应用等步骤类似),然后安装WebView2插件
安装WebView2插件
3.安装好后工具箱会多出一个WebView2控件,把控件拖到Form中使用即可
工具箱的WebView2控件
4.Source属性设置初始的页面,然后运行
Source属性
运行效果
如果运行出来是一个白框应该是运行时装错了,检查下是不是和 *** 作系统同一个位数,如果装的是浏览器内核看下是不是Beta版。如果是一个灰框(就像是运行了控件不存在一样)暂时还没找到解决方法,可以按照相同步骤换一台电脑 *** 作看是不是 *** 作步骤的问题。
有时我们用 webView 展示 html 是需要自定义头部视图与底部视图,原生没有像 tableView 那样提供相应的方法。我们只能自己写了。
设置 contentInset,而不是 contentSize。
配置区头:
设置 contentSize 的时机是在 - (void)webViewDidFinishLoad:(UIWebView *)webView 网页加载完成之后,此时 html 网页是和头部视图重叠在一起,需要 1s 左右时间更新视图,体验不好。而使用 contentInset 不会发生这种现象。
在 webView 加载完成后,获取 UIWebBrowserView 的 size 并重新设置 webView 的 contentSize。
UIWebBrowserView 是负责展示 html 内容的。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)