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
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
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 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 <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>
voici une capture de linterface du deeckBuilder sur SceneBuilder
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 }
et voici ce que je veux faire
Merci pour votre aide![]()
Partager