繁体   English   中英

具有ArrayList的Java FXML Tableview

[英]Java FXML Tableview with ArrayList

嗨,大家好我尝试以跳跃和运行游戏,在大学我保存的数据的项目做一个得分列表Player与属性类的nicknamefinalScoreArrayList 我想在FXML TableView显示数据,但是它将不起作用,并且仅显示任何内容。

我已经尝试将属性声明为SimpleString / IntegerProperty但是它没有改变。

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

您可以尝试一些更改

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

如果cellFactory ,则必须查看cellFactory的名称约定

我已经尝试了您的代码,这是我可以假定的问题:

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

您将finalScore输入为finaleScore ,但没有输入任何值,因为这样的属性不存在。 但是,这不会影响“昵称”列的值填充。 因此,我的第二个猜测是您可能尚未设置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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM