Java FXML Tableview с ArrayList - PullRequest
       1

Java FXML Tableview с ArrayList

1 голос
/ 14 июня 2019

Привет, ребята. Я пытаюсь составить список результатов для игры Jump & Run для проекта в университете. Я сохраняю данные класса Player с атрибутами nickname и finalScore в ArrayList. Я хочу показать данные в FXML TableView, но они не будут работать и только не будут отображать контент.

Я уже пытался объявить атрибуты как SimpleString / IntegerProperty s, но они не изменились.

public class ScoreController implements Initializable {

    @FXML
    private TableView<Player> table;
    @FXML
    private TableColumn<Player, String> Nickname;
    @FXML
    private TableColumn<Player, Integer> Score;

    // Creating Observable Array List
    private ObservableList<Player> data = FXCollections.observableArrayList();

    // Set up the Scene
    private Parent scoreList;

    void setUp() throws Exception{
        scoreList = FXMLLoader.load(getClass().getResource("/fxml/Score.fxml"));
        App.scoreList = new Scene(scoreList,800,500);
    }


    // Adding data to the Observable List and setting Column Factories
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        data.add(new Player("Chris", 11));
        data.add(new Player("Agil", 12));
        Nickname.setCellValueFactory(new PropertyValueFactory<Player, String>("nickname"));
        Score.setCellValueFactory(new PropertyValueFactory<Player, Integer>("finaleScore"));
        table.setItems(data);
    }
}

Я ожидал, что TableColumn покажет данные ArrayList, но TableView показывает только «нет содержимого» в этой таблице.

РЕДАКТИРОВАТЬ Класс игрока

public Player(String nickname, int finalScore){
    setNickname(nickname);
    setFinalScore(finalScore);
}
public void setNickname(String nickname) {
    this.nickname = nickname;
}
void setFinalScore(int score){
    finalScore = score;
}
public String getNickname(){
    return nickname;
}
public int getFinalScore() {
    return finalScore;
}

Ответы [ 2 ]

0 голосов
/ 16 июня 2019

Я опробовал ваш код, и я могу предположить, что проблема заключается в следующем:

Score.setCellValueFactory(new PropertyValueFactory<Player, Integer>("finaleScore"));

У вас неправильный finalScore как finaleScore, который не возвращает нетзначения, так как такого свойства не существует.Однако это не влияет на заполненность значений столбца Nickname.Итак, мое второе предположение, что вы, возможно, не установили контроллер для файла fxml.Пожалуйста, убедитесь, что в вашем коде Score.fxml есть строка:

fx:controller="<your package name here >.ScoreController"

например

<AnchorPane prefHeight="400.0" prefWidth="600.0" fx:controller="com.example.ScoreController">

<!-- other children nodes here  -->

</AnchorPane>

РЕДАКТИРОВАТЬ

Попробуйте изменить эти строкипросто быть:

    @FXML
    public TableView table;
    @FXML
    public TableColumn Nickname;
    @FXML
    public TableColumn Score;

0 голосов
/ 14 июня 2019

Вы можете попробовать некоторые изменения

 Nickname.setCellValueFactory(col ->new SimpleStringProperty(col.getValue().getNickName());
 Score.setCellValueFactory(col ->new SimpleIntegerProperty(col.getValue().getFinalScore());

Если это работает, вы должны посмотреть на соглашение об именах для cellFactory

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...