[英]Java FXML Tableview with ArrayList
嗨,大家好我尝试以跳跃和运行游戏,在大学我保存的数据的项目做一个得分列表Player
与属性类的nickname
和finalScore
在ArrayList
。 我想在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.