2017-06-13 2 views
2

プログラミングの初心者です。現時点では、個人編成ツールのJavaFXを使用しています。私はVBoxのはaddBookと呼ばれる、ここで(bookStagesと呼ばれる)(ブックと呼ばれる)のボタンの配列リストと段階を示している、とのIntはbookButtonCountが0整数を変更した後でも整数の前の値を使用する方法

addBook.setOnAction(new EventHandler<ActionEvent>() { 
@Override 
    public void handle(ActionEvent t) { 
     addBooks.getChildren().add(books.get(bookButtonCount)); 

     books.get(bookButtonCount).setOnAction(new EventHandler<ActionEvent>() { 
      @Override 
       public void handle(ActionEvent t) { 
       bookStages.get(bookButtonCount).show(); 
       System.out.println(bookButtonCount); 
       } 
     }); 
     bookButtonCount++; 
    } 
}); 

に設定と呼ばれる最初のボタンは、「本からボタンを追加します"VBoxにarraylist。 vboxからのボタンは、ステージarraylistからステージを開くことになっています。 vboxに新しいボタンを追加し、そのボタンを自分のステージを開くように設定するたびに、ボタンを複数回起動することができます。 bookButtonCountを参照として使用すると、vbox内の書籍arraylistからボタンを押すたびにbookButtonCountの現在の値がチェックされるため(ボタンが追加されるたびに変更されるため)、正しくないステージが開きます。

bookButtonCountの値が設定されているときにボタンのアクションを保存する方法はありますか?

そうでない場合は、どのように設定する必要がありますか?ここ は有用である可能性があるコードのいくつかのより多くのビットです:

ArrayList<Stage> bookStages = new ArrayList(); 
ArrayList<Button> books = new ArrayList(); 
    for (int i=0;i<10;i++){ 
    books.add(new Button("Book " + (i+1))); 
    bookStages.add(new Stage()); 
    bookStages.get(i).setTitle("Book " + (i+1)); 
    } 

答えて

3

ボタンと、ステージを作成するときだけハンドラを登録:

ArrayList<Stage> bookStages = new ArrayList(); 
ArrayList<Button> books = new ArrayList(); 
for (int i=0;i<10;i++){ 
    Button button = new Button("Book " + (i+1)); 
    books.add(button); 
    Stage stage = new Stage(); 
    bookStages.add(stage); 
    stage.setTitle("Book " + (i+1)); 
    button.setOnAction(e -> stage.show()); 
} 

addBook.setOnAction(e -> { 
    addBooks.getChildren().add(books.get(bookButtonCount)); 
    bookButtonCount++ ; 
}); 
+0

完全に働きました、ありがとうございました。 – Shayne

関連する問題