Не совсем понятно, о чем вы спрашиваете, но, возможно, это помогает.
Вы уже «знаете», когда создаете кнопку, индекс которой она имеет: индекс задается как i
. Так что вам просто нужно создать обработчик событий, который ссылается на это значение. Единственный улов здесь заключается в том, что вы не можете ссылаться на неконечную переменную (или переменную, которую нельзя сделать окончательной, просто добавив ключевое слово final
) в лямбда-выражении, поэтому вам может потребоваться скопировать ее в конечная переменная.
Например:
Button getTeamsButton = new Button( "Load Teams and Details" );
getTeamsButton.setOnAction( e -> {
getTeams.scrapeTeams();
if( !getTeams.getTeams().isEmpty() ) {
for( int i = 0; i < getTeams.getTeams().size(); i++ ) {
Button teamName = new Button(
getTeams.getTeams().get(i).getTeamName() );
teamNamesButtons.add( teamName );
layout1.getChildren().add( teamNamesButtons.get( i ) );
final int index = i ;
teamName.setOnAction(evt -> {
for (int j = 0 ; j < getTeams.getTeams().get(index).getRoster().size(); j++) {
System.out.println(getTeams.getTeams().get(index).getRoster().get( j ));
}
});
}
}
});
Хотя вам, вероятно, индекс не нужен; просто соответствующие данные. Вы не показали, что на самом деле есть в ваших списках, но, если вы определили какой-то класс Team
, вы можете сделать это намного чище с помощью
Button getTeamsButton = new Button( "Load Teams and Details" );
getTeamsButton.setOnAction( e -> {
getTeams.scrapeTeams();
// the if statement here is redundant, if the list is
// empty, the for loop will just iterate zero times....
for( int i = 0; i < getTeams.getTeams().size(); i++ ) {
Team team = getTeams.getTeams().get(i);
Button teamName = new Button(team.getTeamName());
teamNamesButtons.add(teamName);
layout1.getChildren().add(teamName);
teamName.setOnAction(evt -> {
for (int j = 0 ; j < team.getRoster().size(); j++) {
System.out.println(team.getRoster().get( j ));
}
});
}
});
или, используя предпочтительный синтаксис
Button getTeamsButton = new Button( "Load Teams and Details" );
getTeamsButton.setOnAction( e -> {
getTeams.scrapeTeams();
for( Team team : getTeams.getTeams()) {
Button teamName = new Button(team.getTeamName());
teamNamesButtons.add(teamName);
layout1.getChildren().add(teamName);
teamName.setOnAction(evt -> {
for (Player player : team.getRoster) {
System.out.println(player);
}
});
}
});
(Вам даже не нужен список teamNamesButtons
... обратите внимание, что он больше не нужен в приведенном выше коде.)