前提
JavaFXでButtonクラスの配列を作りました。それぞれのButtonをクリックしたときに、どのButtonからのEventか識別する方法がよくわからず、長々と識別するためのコードを書いています。
実現したいこと
Button配列のそれぞれの要素に対するEventHandlerが、もう少しスマートに書けないかと思っています。
自分で識別コードを書かないと、配列の範囲外の添え字になってしまいます。
該当のソースコード
JavaFx
1 2import javafx.application.Application; 3import javafx.event.ActionEvent; 4import javafx.event.EventHandler; 5import javafx.scene.Scene; 6import javafx.scene.control.Button; 7import javafx.scene.control.Label; 8import javafx.scene.layout.VBox; 9import javafx.stage.Stage; 10import javafx.geometry.Pos; 11 12public class HelloWorld extends Application { 13 static int i; 14 static int actionButton; 15 static final int numberOfButton = 2; 16 17 @Override 18 public void start(Stage primaryStage) { 19 Label lbl = new Label(); 20 Button[] btn = new Button[5]; 21 for(i=0; i<numberOfButton; i++){ 22 btn[i] = new Button(); 23 btn[i].setText(String.valueOf(i)); 24 btn[i].setOnAction(new EventHandler<ActionEvent>() { 25 @Override 26 public void handle(ActionEvent event) { 27 String souce = event.toString(); 28 actionButton = Integer.valueOf(souce.substring(souce.indexOf("button")+8,souce.length()-2)); 29 30 System.out.println(actionButton); 31 if(lbl.getText().equals("")){ 32 lbl.setText("Hello World"+"/"+actionButton); 33 }else{ 34 lbl.setText(""); 35 } 36 } 37 }); 38 } 39 40 41 VBox root = new VBox(20); 42 root.setAlignment(Pos.CENTER); 43 for (i=0; i< numberOfButton; i++){ 44 root.getChildren().add(btn[numberOfButton-i-1]); 45 } 46 root.getChildren().add(lbl); 47 48 Scene scene = new Scene(root, 300, 500); 49 50 primaryStage.setTitle("Hello World!"); 51 primaryStage.setScene(scene); 52 primaryStage.show(); 53 } 54 55 public static void main(String[] args) { 56 launch(args); 57 } 58} 59
補足情報(FW/ツールのバージョンなど)
OpenJX 18.0.1 JDK18.0.2
回答5件
あなたの回答
tips
プレビュー