2016-08-10 18 views
0

私のプログラムでゲッターを推測する方法を探しています。私はTextFieldの束を動的に作成しました:JavaFX - TextFieldの配列からTextFieldのフォーカスを取得する

は私のプログラムで
fields = new TextField[105]; 
for (int i = 0; i < fields.length; i++) { 
    fields[i] = new TextField(); 
} 

それは次のようになります。

GameView for the TextFields

このプログラムの目的はの下部にあるリスト内の単語を使用することですあなたはTextFields aka LetterPyramidに記入しなければならない言葉を想像してください。したがって、テキストファイルから私のプログラムに読み込まれた正解とフォーカスされているTextFieldのテキストを比較したいと思います。私が直面している問題は、現在フォーカスされている配列からTextFieldを返すゲッターをどのように見いだすかについての手がかりがないという事実です。それで私を助けることができる人はいますか?

ありがとうございます!ここで

は、あなたが私の問題を理解するためのコードのいくつかのより多くのブロックです。ここ

私は集中のTextField

public TextField getField() { 
    return theFocusedTextField; 
} 

に集中フィールドを受信するハンドラを返したいゲッターであります"model"クラスのメソッドcheckInput()を呼び出します。

view.getField().textProperty().addListener((observable, oldValue, newValue) -> { 
     if (newValue.length() == 1) { 
      Log.debug("Old value: " + oldValue + "\nNew value: " + newValue); 
      boolean isCorrect = model.checkInput(newValue); 
      if (isCorrect) { 
       view.getField().setStyle("-fx-background-color: darkgreen; -fx-text-fill: white"); 
      } else { 
       view.getField().setStyle("-fx-background-color: darkred; -fx-text-fill: white"); 
      } 
     } else if (newValue.equals("")) { 
      view.getField().setStyle("-fx-background-color: darkred; -fx-text-fill: white"); 
     } 
    }); 

現時点では、自分で定義したフィールドセットを受け取ります。答えを確認するためのコードが機能します。助けてくれてありがとう誰にも感謝し、私が自分のやり方を見つけたら、私はここにそれを絶対に投稿します。あなたが定義したと仮定すると、

答えて

0

private TextField theFocusedTextField ; 

を、あなたが必要とするすべてがある:

fields = new TextField[105]; 
for (int i = 0; i < fields.length; i++) { 
    TextField textField = new TextField(); 
    fields[i] = textField ; 
    textField.focusedProperty().addListener((obs, wasFocused, isNowFocused) -> { 
     if (isNowFocused) { 
      theFocusedTextField = textField ; 
     } else { 
      theFocusedTextField = null ; 
     } 
    }); 
} 
+0

はありがとうございました!それがトリックでした。 –

0

は現在NodefocusOwner propertyを使用してSceneから取得することができます焦点を当てました。 と同じシーンの一部であるNodeからSceneを得ることができます。

例:あなたはこの例を確認する必要があり、その場合のように、配列に含まれていないこのようTextField sが、検索できたことを

Scene scene = fields[0].getScene(); 
Node focusOwner = scene.getFocusOwner(); 
if (focusOwner instanceof TextField) { 
    TextField focusedField = (TextField) focusOwner; 
    ... 
} 

注意parentをチェックすることで、styleClass ES、...(これらのいずれかを仮定すると、これは、アレイ内のTextField秒の一つであるかどうか、あなたが決定することができます) -

関連する問題