2016-07-07 5 views
0

JavaFXでTextFieldの配列を作成しようとしていますが、エラーが発生しています。 私は10のTextFieldを持っています:path1、path2 ... path10。JavaFXでTextFieldの配列を初期化する

//initialization 
@FXML 
private TextField path1,path2,path3,path4,path5,path6,path7,path8,path9,path10; 
@FXML 
private TextField[] paths = {path1,path2,path3,path4,path5,path6,path7,path8,path9,path10}; 

私は

String text = paths[0].getText(); 
paths[1].setText(name); 

を書くときしかし、この最初の行は私にNullPointerExceptionが取得します。

私が見つけた解決策は、私のСontrollerのInitizlizatiorを使用することですが、これはとても醜いです:私は多くの行にマニュアルassinmentを取り除くと

@FXML 
private TextField[] paths = {path1,path2,path3,path4,path5,path6,path7,path8,path9,path10}; 

作品を作る得ることができる方法

public void initialize(URL fxmlFileColation, ResourceBundle resources) { 
    paths[0] = path1; 
    paths[1] = path2; 
    paths[2] = path3; 
    paths[3] = path4; 
    paths[4] = path5; 
    paths[5] = path6; 
    paths[6] = path7; 
    paths[7] = path8; 
    paths[8] = path9; 
    paths[9] = path10; 
} 

+0

可能な複製を使用するシンプルなソリューションhttp://stackoverflow.com/questions/28587297/create-array-of-label-using -fxml-in-javafx) – DVarga

答えて

2

このコードを正確に機能させることはできません。配列の作成は

private TextField[] paths = {path1,path2,path3,path4,path5,path6,path7,path8,path9,path10}; 

となります。 FXMLファイルのためのロード・プロセスは、しかし、このように動作します:

  1. は、コントローラクラスのインスタンスを作成します(または既存のものを使用します)。
  2. ローダによって作成されたオブジェクトを挿入するfxmlコンテンツをロードします。
  3. コントローラーの場合は、initializeを呼び出します(存在する場合)。あなたは配列に格納したいオブジェクトがステップの後半で作成されている間

上記のコードは、ステップ1で実行される2

あなたがのListを作成するために、FXMLを使用することによってこの問題を回避することができます

01: TextField sおよびコントローラに注入もちろん( see my answer to Grouping together JavaFX FXML Objects

あなたもinitialize方法で配列初期化子を使用して特定の要素を含むTextFieldの配列を作成することができ

+0

詳細な回答ありがとうございます!しかし、私はあなたの答えの最初の部分を理解することはできません。ちょうどVoid Initialise()で動作させました。これを理解するために読むことをお勧めしますか? – Vittori0

+0

@ Vittori0:私はリンクされた答えでアプローチを説明しました。シーングラフとリストに 'N​​ode'sを挿入するだけです。 [* Introduction to FXML *](https://docs.oracle.com/javase/8/javafx/api/javafx/fxml/doc-files/introduction_to_fxml.html)のセクション「Define Blocks」/ fx:referenceを参照してください。読み込みプロセスの説明を参照している場合は、そのページのコントローラセクションを参照してください。オブジェクトの作成中に初期化されるフィールドは、後で 'FXMLLoader'がフィールドを注入してコントローラインスタンスを使用する前に発生します。 'path'フィールドが非'ヌル 'になるときです。 – fabian

0

私はあなたができるとは思わない。 FXMLが変数を初期化できるように、変数を個別に宣言する必要があります。次に、各要素を何かに設定して、配列TextFieldを動作させる必要があります。それを行う最善の方法は、あなたが持っている解決策を、initialize(...)の関数で使い、それを意味するもの、つまり、初期化することです。

0

iは([JavaFXのにFXMLを使用してラベルのアレイを作成する]の

TextField[] txt = new TextField[beanFields.length]; 
for (int i=0; i<=beanFields.length-1; i++) { 
       TextField textField = new TextField(); 
       txt[i] = textField; 
       textField.setPrefWidth(200); 
       textField.setPrefHeight(32); 
    }