2016-06-19 10 views
0

現在、CheckBoxコントロールのArrayListがあります。私はユーザーがボックスをチェックしたりチェックを外したりするたびにキャプチャしようとしています。しかし、実際には実現できない各チェックボックス毎に別々のハンドラを記述することなく、どのように行うのか把握することはできません。JavaFX - コントロールのグループのイベントハンドラ

私は他の回答を見てきましたが、すべて特定のプロジェクトに固有のものです。誰かが、コントロールのグループ全体のイベントをキャプチャする方法について、直接的に私に直接指示することができますか?

最終目標:handle()メソッド内でどのチェックボックスがオン(またはチェックされていない)であるかを判断し、それに応じて動作します。

私は新しいコーダーなので、ありがとうございます!

+0

それぞれ別々のハンドラを書くのはなぜ実現できないのですか? –

答えて

0

チェックボックスのすべてのリストについては、EventHandlerを使用してみてください。

EventHandler evChb = new EventHandler<ActionEvent>() { 
    @Override 
    public void handle(ActionEvent event) { 
     if (event.getSource() instanceof CheckBox) { 
      CheckBox chb = (CheckBox) event.getSource(); 
      chb.setSelected(!chb.isSelected()); 
     } 
    } 
}; 

上記で作成したイベントを追加してください。

for(CheckBox ch: list) { 
    ch.setOnAction(ecChb); 
} 
0

最も簡単な方法は、各チェックボックスのために別のハンドラを作成することです:あなたは本当にすべてのチェックボックスに同じハンドラを使用したい場合は、イベントのソースを取得するためにEvent.getSource()を使用することができます

import java.util.ArrayList; 
import java.util.List; 

import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.control.CheckBox; 
import javafx.scene.control.ScrollPane; 
import javafx.scene.layout.VBox; 
import javafx.stage.Stage; 

public class LotsOfCheckBoxes extends Application { 

    @Override 
    public void start(Stage primaryStage) { 
     List<CheckBox> checkBoxes = new ArrayList<>(); 
     int numBoxes = 20 ; 

     VBox container = new VBox(5); 

     for (int i = 1 ; i <= numBoxes ; i++) { 
      checkBoxes.add(new CheckBox("Check box "+i)); 
     } 

     container.getChildren().addAll(checkBoxes); 

     for (CheckBox cb : checkBoxes) { 
      cb.setOnAction(event -> handleCheckBox(cb)); 
     } 

     Scene scene = new Scene(new ScrollPane(container), 200, 400); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

    private void handleCheckBox(CheckBox cb) { 
     System.out.println(cb.getText() + (cb.isSelected() ? " selected" : " deselected")); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 

が、あなたは、いくつかの醜いダウンキャストで終わる:

import java.util.ArrayList; 
import java.util.List; 

import javafx.application.Application; 
import javafx.event.ActionEvent; 
import javafx.event.EventHandler; 
import javafx.scene.Scene; 
import javafx.scene.control.CheckBox; 
import javafx.scene.control.ScrollPane; 
import javafx.scene.layout.VBox; 
import javafx.stage.Stage; 

public class LotsOfCheckBoxes extends Application { 

    @Override 
    public void start(Stage primaryStage) { 
     List<CheckBox> checkBoxes = new ArrayList<>(); 
     int numBoxes = 20 ; 

     VBox container = new VBox(5); 

     for (int i = 1 ; i <= numBoxes ; i++) { 
      checkBoxes.add(new CheckBox("Check box "+i)); 
     } 

     container.getChildren().addAll(checkBoxes); 

     EventHandler<ActionEvent> handler = event -> { 
      CheckBox cb = (CheckBox) event.getSource() ; 
      handleCheckBox(cb); 
     }; 

     for (CheckBox cb : checkBoxes) { 
      cb.setOnAction(handler); 
     } 

     Scene scene = new Scene(new ScrollPane(container), 200, 400); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

    private void handleCheckBox(CheckBox cb) { 
     System.out.println(cb.getText() + (cb.isSelected() ? " selected" : " deselected")); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 
関連する問題