2016-07-06 7 views
0

私はFXMLで宣言されたTabPaneを持っています。私は新しいタブを動的に追加しようとしています。新しいタブを作成する独自のFXMLで

私はそれらのタブの別のクラスを作成しました:

public class DetailTab extends Tab { 

私Controller.javaは新しいDetailTabsを生成し、私のTabPaneに追加されます。DetailTab.java以内

detailsPane.getTabs().add(new DetailTab(title)); 

、私はDetailTabコンストラクタに渡されたStringに応じて、新しいタブのコンテンツに異なるFXMLファイルを設定しようとしています。

try { 
       System.out.println("Trying fxml"); 
       this.setContent(FXMLLoader.load(getClass().getResource("tabUserComments.fxml"))); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 

これにより、NullPointerExceptionが作成されます。 tabUserComments.fxmlファイルは、DetailTab.javaと共にプロジェクトのルートディレクトリにあります。

IntelliJ project structure

これを行うための最善の方法は何ですか?私は、DetailTab自体の中からFXMLファイルにコンテンツを設定することもできますか?可能であれば、コントローラーを使用してタブの内容を設定しないでください。

+0

あなたは部分的な表示が必要なようですが、私はjavafxのサポートと同じバッキングコントローラで異なるfxmlファイルをロードすると、コントローラの新しいインスタンスが作成され、同じインスタンス/状態を共有しません – niceman

+0

必要に応じて、個々のタブのfxmlごとに別々のコントローラを作成してもよろしいですか?私はtabUserComments.fxmlに別のコントローラを割り当てると、例外がクリアされることに気付きました。 しかし、今、私はタブがまだ新しいfxmlデータによって占められていないことを見ています。 – Zephyr

+0

別のfxmlファイルでタブを設定する方が良いでしょうか?私は多くのタブを持つことを予定しており、それぞれの異なるコードをすべて使ってDetailTabクラスを拡張するのではなく、個別にデザインすることを好みます。 – Zephyr

答えて

0

私は私のDetailsTab.javaクラス内で次のコードを使用して部分的な解決策を得ることができた:私はtabUserCommentsのコントロールに含まれるデータにアクセスすることができないよう

try { 
       FXMLLoader loader = new FXMLLoader(getClass().getResource("tabUserComments.fxml")); 
       loader.setController(this); 
       this.setContent(loader.load()); 

      } catch (Exception e) { 
       e.printStackTrace(); 
      } 

これはまだ問題を引き起こしています。 fxml。しかし、データの受け渡しがまったく別の問題であるため、これを回答としてマークします。個々のFXMLファイルで各タブを設計することができます。

+0

'loader.setController(this);'つまらない制御とコントローラーが悪い匂いです。imho – whitesite

関連する問題