2017-03-19 15 views
0

私は顧客、予約、請求書などの単純なエンティティを管理するjavafxアプリケーションを作成しています。私は私のメインGUIで、次のFXMLを定義し、GUIの場合:コントローラの既存のインスタンスを取得

<TabPane fx:id="mainTabPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="430.0" prefWidth="698.0" tabClosingPolicy="UNAVAILABLE" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="gui.MainController"> 
    <tabs> 
     <Tab id="BoxTab" fx:id="boxManagementTab" text="Box Management"> 
      <content> 
       <fx:include source="boxTab.fxml"/> 
      </content> 
     </Tab> 
     <Tab text="Booking"> 
      <content> 
       <fx:include source="bookingTab.fxml"/> 
      </content> 
     </Tab> 
     <Tab text="Bill" > 
      <content> 
       <fx:include source="billTab.fxml"/> 
      </content> 
     </Tab> 
    </tabs> 
</TabPane> 

これらのタブでの基本的なデータを示してちょうどTableviewsがあります。すべてのタブはそれ自身のコントローラを持っています。私が直面している問題は、例えば私が新しい請求書に現れたときに予約を削除したいということです。これは、新しいデータをTableviewに設定する必要があることを意味します。

私は、FXMLLoaderとload()メソッドを使用して、billコントローラのBooking of BookingのTableViewにアクセスしたかったのです。しかし、私が知る限り、load()を使うたびにコントローラの新しいインスタンスが作成されます。 コントローラの既存のインスタンスにアクセスする方法はありますか? このタブのコントローラーをロードすることでこれを実行したかったのです。

+0

はhttp://stackoverflow.com/documentation/javafx/1580/fxml-and-controllers#t=201703201252299188006を参照してください。 –

答えて

-1

まだFXMLLoaderインスタンスがある場合は、FXMLLoader#getController()を呼び出して、作成されたコントローラインスタンスを取得することができます。プログラムのライフサイクルでコントローラを後でアクセスする必要がある場合は、フィールドに割り当ててください。

Documentation

+0

私はそれについて考えました。しかし、FXMLLoader load()メソッドは使用しません。上記のコードスニペットに示されているように、タブはのmain.fxmlファイルにロードされるためです。多分、私がローダーにアクセスできる方法はありますかタブを使用していますか? – hiaslosch17

+0

その場合、あなたはどこかのコードでタブの読み込みを気にしない限り、何らかの方法でコントローラにアクセスすることはできません。 – n247s

+0

これを行う方法は、[Fxml documentation](https://docs.oracle.com/javase/8/javafx/api/javafx/fxml/doc-files/introduction_to_fxml.html#nested_controllers)に明確に記載されています。私は自分のコンピュータに戻ったときに他のリンクを見つけ出すことができます。 –

関連する問題