質問者さんのハンドラーの中身についてコメントします。ハンドラーの中でnameButtons[index]とnameButtons[i]をループで比較していることから質問者さんの意図はハンドラーの中で最初のボタンならindex=0、次のボタンならindex=1となることを期待しているはずです。しかしおそらくindexの宣言の位置が不適切なため意図通りに動作しないと思います。
意図通りにするには次のようにforループの中でindexを「finalなローカル変数として宣言」する必要があります。またハンドラーの実体はこのローカル変数indexを参照できるスコープ内(つまりループの内側)でlambda式として参照するか無名クラスとしてnewする必要があります。(おそらく質問者さんのコードはindexをフィールドにしているかforループの外にあるローカル変数として宣言していると思われます。)
java
1for (int i = 0; i < a; i++) {
2 nameButtons[i] = new Button();
3 ...
4 int index = i; // ここでローカル変数として「宣言」することが必須
5 // (1) lambda式でハンドラーを記述する例(Java1.8以降でしか使えません)
6 nameButtons[i].setOnAction(ev -> {
7 Button actionButton = nameButtons[index]; //<-最初のボタンはindex=0,次はindex=1になります
8 ...
9 });
10 // (2) 無名クラスでハンドラーを記述する例。(1)と同じ動作になります。
11 // Java1.8より前のバージョンではこちらの書き方になります。でもJavaFXを使っているということは
12 // 多分Java1.8をお使いだと思うので(1)を推奨します。
13 nameButtons[i].setOnAction(new EventHandler<ActionEvent>() {
14 @Override
15 public void actionPerformed(ActionEvent ev) {
16 Button actionButton = nameButtons[index];
17 ...
18 }
19 });
20}
さらに、ご質問のコードのハンドラー内でのループによる比較には意味がありません。なぜならループ内のif文はどのボタンでも必ずtrueになり実行されてしまうからです。ループによる比較を行わずとも何番目のボタンなのかは最初からindexに入っているはずです。