Ajouter un Gestionnaire d'événements pour ImageView contenues dans TilePane contenues dans VBox?

J'ai le schéma suivant:

  • Une VBox, contenant une HBox et un TilePane.

Dans HBox sont les boutons, les étiquettes et les champs de texte.

Chaque fois que je clique sur la racine (HBox), je me dois d'ajouter une ImageView à la tuile volet. Cette ImageView shold contenir une image (exemple: "2.jpg"). Maximum de la tuile volet de composants est de 5.

Chaque fois que je clique sur l'image, je doit charger une nouvelle image à l'cliqué ImageView, exemple "1.jpg". Il n'est pas de travail. Lorsque je clique sur mon image, c'est comme je suis en cliquant sur la racine de sorte qu'il crée une autre cellule de TilePane. Voici le code, pouvez-vous m'aider?

/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package dadao1;
import java.util.HashSet;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.image.ImageView;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.TilePane;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
/**
*
* @author Ambra
*/
public class Dadao1 extends Application {
VBox root;
HashSet dadi = new HashSet();
//static int numeroDadi = 0;
@Override
public void start(Stage primaryStage) {       
setGui();
Scene scene = new Scene(root, 300, 300);
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
} 
/**
*This private method sets up the GUI.
* No parameters are required
*/
private void setGui(){
root = new VBox();
HBox buttons = new HBox();
final Button newGame = new Button("New Game");
final Button print = new Button("Print");
final Button animation = new Button("Moving");
animation.addEventHandler(ActionEvent.ACTION, new EventHandler<ActionEvent>() {
//this button is labeled "Moving" at the begin. If pressed it changes its label to "Dissolving" and viceversa.
@Override
public void handle(ActionEvent event) {
if (animation.getText().equals(new String("Moving")))
animation.setText("Dissolving");
else animation.setText("Mooving");
}
});
final Label score = new Label("Total");
final TextField points = new TextField();
final Label pointsLabel = new Label("Score");
root.setStyle("-fx-background-color: green");
buttons.getChildren().addAll(newGame,print,animation,score,points,pointsLabel);
final TilePane dadiPane = new TilePane();
dadiPane.setVgap(10);
dadiPane.setHgap(10);
root.getChildren().addAll(buttons, dadiPane);
root.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
if(dadi.size()<5){
System.out.println("Adding img");
final ImageView img = new ImageView("2.jpg");
//should I put final in front of ImageView?
img.addEventHandler(ActionEvent.ACTION, new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
//I want that when a tile is pressed an event occours.
//that event should be "add a new image to the ImageView just clicked",
//for example: img is not "2.jpg" but "3.jpj", by the way, I'm not able neither 
//to to print the folowing messagge :(
//It's like my root is pressed even if my mouse ha clicked at the image in img var.
System.out.println("Tile pressed ");
}
});
dadi.add(img);
dadiPane.getChildren().add(img);
}else System.out.println("You cannot create more than 5 dices");
}
});
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
}
Essayez d'ajouter le eventListenet à l'ImageView au lieu de la racine de
J'ai du ajouter un EventHandlet à la fois parce qu'ils ont à faire des choses différentes: racine devez ajouter une ImageView à la Tuile volet lorsqu'il est cliqué et ImageView doit changer l'image quand on clique dessus.

OriginalL'auteur bog | 2014-08-28