Bonjour à tous,

Je suis en train de développer un jeu yugioh! et j'ai commencé par créer des interfaces pour faire un Deck Builder. Celui-ci a deux composants : un cardInfos qui affiche l'image et le texte d'une carte (qui vient d'un include car j'en aurais également besoin pour une autre interface duel) et un search engine. Ce dernier quand on fait une requête pour trouver une carte , pour chaque carte trouvée, il va générer un fxml de type CardResult (son controlleur contiendra autant que attribut le resultat de la carte )et ils vont tous être ajoutés à un gridpane.

Le soucis que je rencontre, c'est que je veux ajouter un évènement à chaque CardResult du gridPane, quand je clique dessus, je puisse récupérer le résultat et pouvoir changer l'image et le texte du composant cardInfos. Cependant je ne sais pas comment récupérer le controlleur qui contient les infos dont j'ai besoin

ici le code du deckBuilder controller
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
 
    public class DeckBuilderController implements Initializable{
 
	//SEARCH CARD ENGINE=========================
	@FXML 
	TextArea cardNameInputText;
 
	@FXML 
	GridPane cardResultList;
 
	//CARD INFOS INTERFACE=======================
	@FXML
	AnchorPane cardInfos;
 
	@FXML
    CardInfosController cardInfosController ;
 
 
	public void searchCard() throws IOException
	{
		String cardName = cardNameInputText.getText() ;
 
		if (cardName != "")
		{
			try
			{
				Connection connex = DatabaseEngine.connect();
 
				ResultSet res = DatabaseEngine.selectCards(connex, cardName);
 
				int countCol = 0;
 
				int countRow = 0;
 
 
				while(res.next())
				{
 
					cardResultController controller = new cardResultController(res);
 
 
					controller.getStage().getScene().getRoot().setOnMouseEntered(new EventHandler<MouseEvent>() {
		                @Override
		                public void handle(MouseEvent event) {
 
		                	System.out.println("mouseEvent");
 
 
		                	Parent anchor = (Parent) event.getTarget() ;
 
		                	//cardInfosController.setBigCardImageView(recuperer le path de l'image dans le controlleur ???);
 
				       //cardInfosController.setCardDescriptionTextArea(recupérer le description de la carte dans le controlleur ???);
 
		            });
 
                             //two colones on teh gripane
			        if (countCol == 2)
			        {
			        	countCol = 0;
 
			        	countRow++;
			        }
 
 
			        cardResultList.add(controller.getStage().getScene().getRoot(), countCol, countRow);
 
			        countCol++;
			     }	
 
			}
			catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
 
 
	@Override
	public void initialize(URL arg0, ResourceBundle arg1) {
 
		        System.out.println( cardInfos);
		        System.out.println(cardInfosController);
	}
}
ici le builderInterface
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
<AnchorPane fx:controller="controller.DeckBuilderController">
   <children>
      <BorderPane fx:id="cardBuilderPane" >
         <right>
            <AnchorPane>
                  <FlowPane>
                        <Pane>
                              <TextArea fx:id="cardNameInputText" promptText="Enter card name here" />
                              <Button fx:id="searchCardButton"/>
                           </children>
                        </Pane>
                        <ScrollPane>
                              <GridPane fx:id="cardResultList">
                              </GridPane>
                        </ScrollPane>
                  </FlowPane>
               </children>
            </AnchorPane>
         </right>         
     </BorderPane>
     <fx:include fx:id="cardInfos" source="CardInfosInterface.fxml" />
</AnchorPane>
ici le cardResult controller

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
public class cardResultController implements Initializable {	
 
	@FXML
	ImageView cardImage;
 
	@FXML
	Text cardNameTF;
 
	@FXML
	TextFlow cardInfos;
 
	@FXML 
	TextFlow cardAtkDef;
 
	private ResultSet res ;
 
	private final Stage stage;
 
 
	public cardResultController(ResultSet res) throws IOException
	{
		System.out.println("helo from here");
 
		this.res = res;
 
		this.stage = new Stage();
 
		FXMLLoader loader = new FXMLLoader(new File("src/main/java/interfaces/cardResultInterface.fxml").toURI().toURL());
 
		// Set this class as the controller
        loader.setController(this);
 
        this.stage.setUserData(res);
 
        // Load the scene
        this.stage.setScene(new Scene(loader.load()));
 
	}
 
 
	/**
    * Show the stage that was loaded in the constructor
    */
    public Stage getStage()
    {
    	return stage;
    }
 
    public void setCardInfos(String Attribute,  String Race, String Level) 
    {
    	cardInfos.getChildren().addAll(new Text(Attribute), new Text("/"), new Text(Race), new Text("/"), new Text(Level));	
    }
 
    public void setCardAtkDef(String Atk,  String Def)
    {
    	cardAtkDef.getChildren().addAll(new Text(Atk), new Text("/"), new Text(Def));
    }
 
	public ImageView getCardImage() 
	{
		return cardImage;
	}
 
	public TextFlow getCardInfos() 
	{
		return cardInfos;
	}
 
	public void setCardInfos(TextFlow cardInfos) 
	{
		this.cardInfos = cardInfos;
	}
 
	public ResultSet getRes() 
	{
		return res;
	}
 
	@Override
	public void initialize(URL arg0, ResourceBundle arg1) 
	{
		try
		{
 
			System.out.println("res name : ::" + res.getString("name"));
 
			cardImage.setImage(new Image((res.getString("imageSmall"))));
 
			cardNameTF.setText(res.getString("name"));
 
			setCardInfos(res.getString("attribute"), res.getString("race"), String.valueOf(res.getInt("level")));
 
			setCardAtkDef(String.valueOf(res.getInt("atk")), String.valueOf(res.getInt("def")));
 
		}
		catch(Exception e)
		{
			System.out.println("error with res");
		}
	}
 
	public void setOnMouseEntered(EventHandler<MouseEvent> eventHandler) {
		// TODO Auto-generated method stub
 
	}
voici une capture de linterface du deeckBuilder sur SceneBuilder
Nom : db.png
Affichages : 235
Taille : 499,4 Ko

et voici ce que je veux faire
Nom : deckBuilderNexus.png
Affichages : 227
Taille : 1,47 Mo
Merci pour votre aide