@FXMLはすべての宣言に必要ですか、それとも最初の宣言だけに必要ですか?
つまり、使用する必要があります
@FXML
public Label timerLabel = new Label();
@FXML
public TextField mainTextField, projectTextField ;
@FXML
public Button goButton, deleteAllButton ;
@FXML
public ComboBox<String> projectComboBox ;
@FXML
public TableView<Entry> mainTable ;
@FXML
public TableColumn<Entry, String> titleColumn, timeColumn, dateColumn ;
@FXML
public TableColumn<Entry, Boolean> checkColumn, buttonColumn ;
@FXML
public checkBox checkAllCheckBox ;
または
@FXML
public Label timerLabel = new Label();
public TextField mainTextField, projectTextField ;
public Button goButton, deleteAllButton ;
public ComboBox<String> projectComboBox ;
public TableView<Entry> mainTable ;
public TableColumn<Entry, String> titleColumn, timeColumn, dateColumn ;
public TableColumn<Entry, Boolean> checkColumn, buttonColumn ;
public checkBox checkAllCheckBox ;
ありがとうございました!
_@FXML
_アノテーションを使用すると、FXMLLoader
はFXMLファイルで定義された値をコントローラークラスの参照に挿入できます。つまり、timerLabel
に_@FXML
_の注釈を付けると、load()
メソッドがの要素によって呼び出されたときに、FXMLLoader
によって初期化されます_fx:id="timerLabel"
_を含むFXMLファイル。他の人がコメントで指摘したように、これはあなたがのようなコードを書くべきではないことを意味します
_@FXML
private Label timerLabel = new Label();
_
ここでtimerLabel
は、最初にコードで作成したnew Label();
に初期化され、その後すぐにFXMLファイルで定義された値に再初期化されます。これはせいぜい冗長であり、最悪の場合は誤解を招きます。変数名を_fx:id
_に正しく一致させないと、変数が誤ったLabel
を参照しているため、エラーの追跡が非常に困難になります。
あなたの実際の質問に行くには:
FXMLLoader
がFXMLファイルをロードするとき、_fx:id
_属性を持つ要素をコントローラーに挿入しようとします。探します
fx:id
_属性に一致する変数名を持つpublic
フィールド、orfx:id
_で注釈された_@FXML
_属性と一致する変数名を持つフィールド(public
かどうかにかかわらず)。したがって、この例では、すべてのフィールドがpublic
であるため、すべての_@FXML
_アノテーション(最初のものも含む)を省略しても、引き続き機能します。
ただし、適切な方法に従ってフィールドをprivate
にした場合、インジェクションを機能させるために、各宣言に_@FXML
_の注釈を付ける必要があります。
そう
_@FXML
private Label timerLabel;
@FXML
private TextField mainTextField;
_
などは機能しますが、
_@FXML
private Label timerLabel;
private TextField mainTextField;
_
しない。
それぞれに
fx:id="somename"
あなたには必要だ
@FXML
public SomeClass somename;
1行で書くほうがいいです。たくさんあると読みやすいからです
@FXML public SomeClass somename;
初期化せずに
@FXML
public Label timerLabel = new Label(); // this is wrong
@FXML
private TextField idTextField;
@FXML
private TextField passwordTextField;
OR
@FXML
private TextField idTextField, passwordTextField;