如何在 Kotlin 中实现 TornadoFX WebEngine 回调
How to implement TornadoFX WebEngine Callback in Kotlin
我正在使用 Kotlin TornadoFX 创建浏览器。当我执行 WebEngine setCreatePopupHandler 时,出现错误:
e: surfing\src\surfing.kt: (76, 13): Modifier 'override' is not
applicable to 'local function'
e: surfing\src\surfing.kt: (76, 13): Expected a value of type WebEngine!
我使用 JavaFX 引用了此 Java 代码:
webEngine.setCreatePopupHandler(
new Callback<PopupFeatures, WebEngine>() {
@Override
public WebEngine call(PopupFeatures config) {
smallView.setFontScale(0.8);
if (!toolBar.getChildren().contains(smallView)) {
toolBar.getChildren().add(smallView);
}
return smallView.getEngine();
}
});
翻译成 Kotlin 以使用 TornadoFX:
var wv = webview()
val br = wv.getEngine()
br.setCreatePopupHandler(Callback<PopupFeatures, WebEngine>() {
override fun call(pf: PopupFeatures): WebEngine {
var smallView = webview()
val stage = Stage(StageStyle.UTILITY)
stage.setScene(Scene(smallView))
stage.show()
val engine = smallView.getEngine()
return engine
}
})
我在互联网上搜索了很长时间,但没有找到任何东西。请有人帮我解决这个错误。
大功告成 :) 要创建匿名 class 的方式与在 Java 中的做法大致相同,您需要在 class 语句:
br.createPopupHandler = object : Callback<PopupFeatures, WebEngine> {
但是,Kotlin 允许您将 SAM 类型转换为 lambda。您还可以利用 属性 访问模式和不可变值稍微清理一下代码。这是重写和 Kotlinified 的代码:
val wv = webview()
val br = wv.engine
br.setCreatePopupHandler {
val smallView = webview()
val stage = Stage(StageStyle.UTILITY)
stage.scene = Scene(smallView)
stage.show()
smallView.engine
}
我还没有真正评估过你在这里做什么,或者这是否是个好主意,所以只听取我对语法的建议:)
我正在使用 Kotlin TornadoFX 创建浏览器。当我执行 WebEngine setCreatePopupHandler 时,出现错误:
e: surfing\src\surfing.kt: (76, 13): Modifier 'override' is not applicable to 'local function'
e: surfing\src\surfing.kt: (76, 13): Expected a value of type WebEngine!
我使用 JavaFX 引用了此 Java 代码:
webEngine.setCreatePopupHandler(
new Callback<PopupFeatures, WebEngine>() {
@Override
public WebEngine call(PopupFeatures config) {
smallView.setFontScale(0.8);
if (!toolBar.getChildren().contains(smallView)) {
toolBar.getChildren().add(smallView);
}
return smallView.getEngine();
}
});
翻译成 Kotlin 以使用 TornadoFX:
var wv = webview()
val br = wv.getEngine()
br.setCreatePopupHandler(Callback<PopupFeatures, WebEngine>() {
override fun call(pf: PopupFeatures): WebEngine {
var smallView = webview()
val stage = Stage(StageStyle.UTILITY)
stage.setScene(Scene(smallView))
stage.show()
val engine = smallView.getEngine()
return engine
}
})
我在互联网上搜索了很长时间,但没有找到任何东西。请有人帮我解决这个错误。
大功告成 :) 要创建匿名 class 的方式与在 Java 中的做法大致相同,您需要在 class 语句:
br.createPopupHandler = object : Callback<PopupFeatures, WebEngine> {
但是,Kotlin 允许您将 SAM 类型转换为 lambda。您还可以利用 属性 访问模式和不可变值稍微清理一下代码。这是重写和 Kotlinified 的代码:
val wv = webview()
val br = wv.engine
br.setCreatePopupHandler {
val smallView = webview()
val stage = Stage(StageStyle.UTILITY)
stage.scene = Scene(smallView)
stage.show()
smallView.engine
}
我还没有真正评估过你在这里做什么,或者这是否是个好主意,所以只听取我对语法的建议:)