Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
未知数量的按钮,如何向每个JavaFX添加不同的事件操作_Java_Button_Javafx_Arraylist - Fatal编程技术网

未知数量的按钮,如何向每个JavaFX添加不同的事件操作

未知数量的按钮,如何向每个JavaFX添加不同的事件操作,java,button,javafx,arraylist,Java,Button,Javafx,Arraylist,我有一个JavaFXGUI,它可以根据团队的数量创建和添加许多按钮,这些按钮存储在ArrayList中,这些按钮的数量各不相同 每个队都有一份名册上的人员名单 我的问题是我想写一些逻辑,在不事先知道的情况下,我可以添加一个按钮列表,单击每个按钮将显示其不同的名册 Button getTeamsButton = new Button( "Load Teams and Details" ); getTeamsButton.setOnAction( e -> {

我有一个JavaFXGUI,它可以根据团队的数量创建和添加许多按钮,这些按钮存储在ArrayList中,这些按钮的数量各不相同

每个队都有一份名册上的人员名单

我的问题是我想写一些逻辑,在不事先知道的情况下,我可以添加一个按钮列表,单击每个按钮将显示其不同的名册

        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);
             }
         });
     }
});