簡體   English   中英

如何在Kotlin中實現TornadoFX WebEngine回調

[英]How to implement TornadoFX WebEngine Callback in Kotlin

我正在使用Kotlin TornadoFX創建瀏覽器。 當我實現WebEngine setCreatePopupHandler時,出現錯誤:

e:surfing \\ src \\ surfing.kt:(76,13):修飾符'override'不適用於'local function'

e:surfing \\ src \\ surfing.kt:(76,13):預期為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
            }
        })

我已經在互聯網上搜索了很長時間,但是沒有找到任何東西。 請有人幫我解決此錯誤。

您幾乎已經到了:)要以與Java中幾乎相同的方式創建匿名類,您需要在class語句前面使用object關鍵字:

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
}

我還沒有真正評估您在這里所做的工作,或者這是否是個好主意,所以只聽我對語法的建議:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM