未知数量的按钮,如何向每个JavaFX添加不同的事件操作
我有一个JavaFXGUI,它可以根据团队的数量创建和添加许多按钮,这些按钮存储在ArrayList中,这些按钮的数量各不相同 每个队都有一份名册上的人员名单 我的问题是我想写一些逻辑,在不事先知道的情况下,我可以添加一个按钮列表,单击每个按钮将显示其不同的名册未知数量的按钮,如何向每个JavaFX添加不同的事件操作,java,button,javafx,arraylist,Java,Button,Javafx,Arraylist,我有一个JavaFXGUI,它可以根据团队的数量创建和添加许多按钮,这些按钮存储在ArrayList中,这些按钮的数量各不相同 每个队都有一份名册上的人员名单 我的问题是我想写一些逻辑,在不事先知道的情况下,我可以添加一个按钮列表,单击每个按钮将显示其不同的名册 Button getTeamsButton = new Button( "Load Teams and Details" ); getTeamsButton.setOnAction( e -> {
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 ) );
}
Button getTeamsButton=new按钮(“加载团队和详细信息”);
getTeamsButton.setOnAction(e->{
getTeams.scrapteams();
如果(!getTeams.getTeams().isEmpty())
{
for(int i=0;i
我能够创建按钮
getTeamsButton.setDisable( true );
teamNamesButtons.get( 0 ).setOnAction( f -> {
for(int i = 0; i < getTeams.getTeams().get( 0 ).getRoster().size(); i++) {
System.out.println(getTeams.getTeams().get( 0 ).getRoster().get( i ));
}
});
}
} );
getTeamsButton.setDisable(true);
teamNamesButtons.get(0).setOnAction(f->{
对于(int i=0;i
如果我指定列表中可以打印花名册的项目,我如何解释顶部按钮的逻辑是0队,第二个按钮是1队,等等
如果您有任何建议,我们将不胜感激。您的问题并不完全清楚,但这可能会有所帮助 当您创建按钮时,您已经“知道”了它的索引:索引由
i
给出。因此,您只需创建一个引用该值的事件处理程序。这里唯一的问题是,您不能在lambda表达式中引用非final变量(或不能通过简单地添加final
关键字而变为final的变量),因此您可能需要将其复制到final变量
例如:
或者,使用首选语法
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
列表……请注意,上面的代码中不再需要它了。)先生,您是个天才,非常感谢。我甚至不能很好地解释我自己,但你的回答很完美,你的最终解决方案更整洁。非常感谢你的帮助。
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);
}
});
}
});