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 🙂

  • Context de reinicio de JavaFX
  • Dibujando líneas desde ViewModel TornadoFX
  • preguntas sobre DI, ViewModel, etc.
  • TornadoFX: Type-Safe CSS con otras bibliotecas
  • No se puede hacer que el nodo se centre en un StackPane con TornadoFX
  • Columnas de tabla dinámica
  • ¿Cómo puedo crear un encabezado de columna nested / dividido usando TornadoFx?
  • Desplazamiento suave en JavaFX TableView
  • Cómo ejecutar tornado fx hello world con java 7
  • TornadoFX ItemViewModel se actualiza si se cambia el object de respaldo que no expone las properties de JavaFX
  • Enlazando una vista a una propiedad de controller cambiante