我有两个类Highscore和HighscoreEinzelspieler。 Highscore是超类,其中发生了类似于视图的表的某些逻辑:

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;
}


现在,我的子类HinghscoreEinzelspieler中需要此函数(带有注释的部分不起作用):

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);

}


现在,我想从我创建的getDisplayHighscore中找到一行。
为此,我尝试使用功能lookup(“#tableRowId” + i)从静态场景中获取具有ID的行。但是我总是得到“无”,我在超类中尝试了:

output.lookup("tableRowId1")


而且有效。所以我认为静态场景是问题所在。

谢谢,
卢卡:)

最佳答案

我不知道什么是Masterklasse.primaryScene,但这应该可以工作:

playerDisplay.lookup("#tableRowId1");


如果Masterklasse.primaryScene应该指向您的output,则需要在getDisplayHighscore()方法中进行分配:

Masterklasse.primaryScene = output;

09-26 05:11