ボタンの未知の数は、どのようにそれぞれのJavaFXに異なるイベントアクションを追加します

ディーンケイン:

私が作成し、チームの数に基づいて、ボタンの数が、これらはArrayListの中に保存されている追加のJavaFX GUIを持っている、この数は異なります。

各チームは、名簿上の人のリストを持っています。

私の問題は、私が最初に知らなくても、私はボタンのリストを追加することができますし、クリックされたとき、それぞれが自分の別の名簿を表示することをロジックのいくつかの並べ替えを書きたいです。

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

                }

私は、ボタンを作成することができています。

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

私は名簿を印刷することができ、リスト内のどの項目を指定した場合と、私はトップボタンのロジックがチーム0で説明どのように、第二などなど、チーム1のですか?

何かアドバイスをいただければ幸いですか!

James_D:

完全にあなたが求めているのか明らかではないが、多分これは役立ちます。

インデックスは次式で与えられます。あなたはそれを持っているインデックスのボタンを作成するときには、すでに「知っています」iただ、その値の参照というイベントハンドラを作成する必要がありますので。ここでの唯一の難点は、あなたが非final変数(または単に追加することによって、最終的にできない変数の参照ができないということである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リストをどちらか...それはもはや上記のコードでは必要なのかに注意してください。)

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=277526&siteId=1