Cómo implementar TornadoFX WebEngine Callback en Kotlin

Estoy usando Kotlin TornadoFX para crear un browser. Cuando implemento WebEngine setCreatePopupHandler, aparece un error:

e: surfing \ src \ surfing.kt: (76, 13): el modificador 'anular' no es aplicable a 'function local'

e: surfing \ src \ surfing.kt: (76, 13): ¡esperaba un valor de tipo WebEngine!

Hice reference a este código Java usando JavaFX:

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(); } }); 

Traducido a Kotlin para usar 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 } }) 

He estado buscando durante mucho time en Internet, pero no encontré nada. Por favor alguien puede ayudarme a arreglar este error.

Ya casi estás 🙂 Para crear una class anónima de la misma forma que lo haces en Java, necesitas usar la palabra key object frente a la statement de la class:

br.createPopupHandler = object : Callback<PopupFeatures, WebEngine> {

Sin embargo, Kotlin le permite convertir los types de SAM en lambdas. También puede utilizar el patrón de acceso a la propiedad y los valores inmutables para limpiar un poco el código. Aquí hay un código reescrito y 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 } 

Realmente no he evaluado lo que estás haciendo aquí o si es una buena idea, así que solo sigue mi consejo sobre la syntax 🙂

  • No se puede usar fontawesomefx con kotlin y tornadofx
  • El text de la label no se actualiza aunque el hilo de la interfaz de usuario parece responder
  • Animación consecutiva en TornadoFX?
  • Tornadofx Javafx - Cómo volver a cargar una vista / componente
  • Forma de configurar las properties de PrimaryStage o Scene en TornadoFX
  • Kotlin y TornadoFX: ¿une una propiedad observable a una function de recostackción?
  • TornadoFX cómo agregar validation al editar TableView
  • TornadoFX ¿Cómo crear MDI con una list de models de windows hijas?
  • TornadoFX reemplaza el layoutChildren en la región
  • TornadoFX cómo enlazar Node style (o styleClass) a una propiedad?
  • TornadoFX - eliminar elemento con ContextMenu hacer clic derecho