2017-08-11 15 views
1

FXMLシーンビルダでインターフェイスのデフォルトメソッドを呼び出す方法を教えてください。SceneBuilder(FXML)のJavaFXコールのデフォルトメソッド

私のようなインタフェースがあります。

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

などコントローラ:

BlaController implements Startable {...} 

を私はFXMLで "handleStart()" メソッドを呼び出した場合、私は次の例外を取得します:

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

メソッドを呼び出す可能性はありますか?

+0

お使いのコントローラが '' 'javafx.fxml.Initializable'''を実施し、達成することができますホープスーパー実装を呼び出すことができる方法です期待される結果、なぜあなたはカスタムインターフェイスが必要ですか? –

+0

コントローラは、リソースバンドルを使用できるように、とにかくInitializableを実装していますが、ここでどのように役立つのか分かりません。 – Punika

答えて

1

インターフェイスのデフォルトメソッドを実装してFXMLで使用することはできません。明らかにFXMLLoaderはリフレクションを使用し、クラスの実装でメソッドを見つけられません。 Controllerクラスのメソッドをオーバーライドしてから、既定のメソッドを呼び出す必要があります。

インターフェイスは変わりません。

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

これは、あなたが

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

が、それは...

+0

これはfxmlローダーの弱点のようです。 しかし、あなたのやり方はうまくいく...感謝の男 – Punika

関連する問題