2017-08-11 6 views
1

Comment appeler une méthode par défaut d'interface dans FXML - scenebuilder.Méthode d'appel JavaFX par défaut dans SceneBuilder (FXML)

J'ai une interface comme:

public interface Startable 
{ 
    default void handleStart(){...} 
} 

et un contrôleur comme:

BlaController implements Startable {...} 

mais si j'appelle la méthode "handleStart()" dans le FXML, je reçois l'exception suivante:

javafx.fxml.LoadException: Error resolving onMouseClicked='#handleStart', either the event handler is not in the Namespace or there is an error in the script. 

Y at-il une possibilité d'appeler la méthode?

+0

Votre contrôleur peut mettre en œuvre '' 'javafx.fxml.Initializable''' et obtenir le résultat attendu, pourquoi avez-vous besoin d'une interface personnalisée? –

+0

Le contrôleur met en œuvre Initializable de toute façon pour pouvoir utiliser le regroupement de ressources, mais je ne vois pas comment cela pourrait m'aider ici? – Punika

Répondre

1

Il n'est pas possible d'implémenter une méthode par défaut d'interface et de l'utiliser en FXML, apparemment FXMLLoader utilise la réflexion et ne trouve pas la méthode dans l'implémentation de la classe. Vous devez remplacer la méthode dans la classe Controller, puis appeler la méthode par défaut.

L'interface reste la même.

public interface Startable { 
    default void handleStart(){...} 
} 

Voici comment vous pouvez appeler la super mise en œuvre

public class BlaController implements Startable { 
    @Override 
    @FXML 
    void handleStart(){ 
     Startable.super.handleStart(); 
    } 
} 

Hope it helps ...

+0

D'accord, cela semble être une sorte de faiblesse du chargeur fxml. Mais votre chemin fonctionne bien ... merci mec – Punika