2 pièce(s) jointe(s)
récupérer le controlleur d'un anchorPane
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:
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:
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:
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
Pièce jointe 628510
et voici ce que je veux faire
Pièce jointe 628525
Merci pour votre aide :)