2017-07-21 5 views
0

J'ai deux classes Highscore et HighscoreEinzelspieler. Est super highscore classe où une certaine logique pour une table comme vue se produit:JavaFx: recherche ne trouve pas le bon noeud

public VBox getDisplayHighscore(ArrayList<Spieler> spielerListe) { 

    VBox output = new VBox(); 
    output.setAlignment(Pos.CENTER); 
    HBox headerRow = new HBox(); 

    Iterator<Spieler> iterator = spielerListe.iterator(); 
    for (int i = 0; iterator.hasNext(); i++) { 
     Spieler tmpPlayer = iterator.next(); 

     HBox tmpRow = new HBox(); 
     tmpRow.setAlignment(Pos.CENTER); 
     tmpRow.getStyleClass().add("tableRow"); 
     tmpRow.setId("tableRowId" + i); //um spaeter die neue Position oder den Gewinner zu markieren 

     Label tmpName = new Label(tmpPlayer.getName()); 
     tmpName.getStyleClass().add("tableName"); 
     Label tmpVersuche = new Label("" + tmpPlayer.getVersuche()); 
     tmpVersuche.getStyleClass().add("tableVersuche"); 
     Label tmpTimer = new Label("" + tmpPlayer.getTimer()); 
     tmpTimer.getStyleClass().add("tableTimer"); 
     Label tmpPaare = new Label("" + tmpPlayer.getPaare()); 
     tmpPaare.getStyleClass().add("tablePaare"); 

     tmpRow.getChildren().addAll(tmpName, tmpVersuche, tmpTimer, tmpPaare); 
     output.getChildren().addAll(tmpRow); 
     } 

    output.getStyleClass().add("table"); 
    return output; 
} 

Maintenant, je besoin de cette fonction dans mon HinghscoreEinzelspieler sous-classe (la partie avec les commentaires ne fonctionne pas):

public HighscoreEinzelspieler() throws IOException, NamenFehler, AlterFehler { 
    // Liste auslesen 
    ArrayList<Spieler> spielerListe = getHighscore(); 
    spielerListe.sort(new SpielerComparatorEinzel()); 
    playerDisplay = super.getDisplayHighscore(spielerListe); 
    playerDisplay.getStyleClass().add("table"); 

    //Node highlight = Masterklasse.primaryScene.lookup("#tableRowId1"); 
    //System.out.println(highlight); 
    //highlight.getStyleClass().remove("tableRow"); 
    //highlight.getStyleClass().add("tableRowWinner"); 

    // mittig einbinden 
    Masterklasse.centerBox.getChildren().addAll(playerDisplay); 

} 

Maintenant, je veux trouver une ligne de la getDisplayHighscore que j'ai créée. Pour cela j'ai essayé d'obtenir la ligne avec l'ID de ma scène statique avec la fonction lookup ("# tableRowId" + i). Mais je reçois toujours un "aucun", je l'ai essayé dans la super classe avec:

output.lookup("tableRowId1") 

et cela a fonctionné. Donc je pense que la scène statique est le problème.

Merci, Luka :)

Répondre

0

Désolé pour ma réponse tardive, je fixe maintenant. C'était quelque chose avec une telle position de code, je dois appeler cette méthode plus tard. Mais je ne sais pas pourquoi ça marche maintenant. Je ne peux pas l'expliquer.

1

Je ne sais pas ce qui est Masterklasse.primaryScene mais cela devrait fonctionner:

playerDisplay.lookup("#tableRowId1"); 

Si Masterklasse.primaryScene doit pointer sur votre output vous devez attribuer dans getDisplayHighscore() méthode:

Masterklasse.primaryScene = output; 
+0

Merci pour votre aide, donc je pense que j'ai le problème, mais je ne sais pas comment y remédier. Lorsque je mets l'ID manuellement sur le et cela fonctionne: 'Node highlight = playerDisplay.lookup (" tableRowId3 "); ' Mais quand je fais quelque chose comme ceci: ' int position = 3; Node highlight = playerDisplay.lookup ("tableRowId" + position); ' Il ne trouve pas l'élément. Merci! – luhara

+0

J'ai tout essayé, pour m'assurer que c'est une chaîne: 'String playerPositionString = Integer.toString (playerPosition); \t \t String tableRowId = "tableRowId"; \t \t tableRowId + = playerPositionString; System.out.println ((instanceDeChaîneDeSystèmes)); ' Et il retourne true, donc je ne sais pas pourquoi il n'accepte pas la chaîne concaténée. – luhara

+0

Aucune idée, chaîne de concaténation et int produit toujours une chaîne. Essayez de déboguer et d'aller dans la méthode 'lookup()' avec la surveillance de l'identifiant donné et de la hiérarchie des objets réels. –