我有两个类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;