我使用listview作为排行榜,并显示由字符串完成的玩家姓名和总分。但我想自定义列表视图,因此它包括位置和平均分数。我在下面提供了一个关于我希望它如何的草图。
现在,我将一个普通字符串添加到Observable列表并在列表视图中查看它,但无法自定义它。我不确定如何实际做到这一点,最好的方法是什么?使用css还是javafx?我对listview有一些问题,例如是否可以有一个静态标题,例如tableview?
更新
我试图创建一个自定义的HBox单元并尝试使用它,但似乎我做错了。我尝试使用gridpane来调整文本位置。但Listview看起来像这样。
我已经加入了两名球员(Jonny获得59分,Mike获得15分)
我见过人们使用listcell (Link)代替Hbox的例子,但我选择这种方式的原因是因为我想传递playerName,totalScore&按totalScore对我的playerStats数组进行排序后的平均值。因此列表视图可以按其总计的升序显示玩家。如果有更好的方法,请分享。
控制器类
全球字段:
ListView<CustomCellHBox> leaderBoard = new ListView<CustomCellHBox>();
ObservableList<CustomCellHBox> rank = FXCollections.observableArrayList();
UpdateListView()方法:
public void updateListView() {
rank.clear();
List<CustomCellHBox> data = new ArrayList<CustomCellHBox>();
for(Statistics s : playerStats){
data.add(new CustomCellHBox(s.getPlayer(),s.getTotalScore(),s.getAverage()));
}
rank = FXCollections.observableArrayList(data);
leaderBoard.setItems(rank);
}
CustomCellHBox类
public class CustomCellHBox extends HBox {
private Label playerName = new Label();
private Label totalScore = new Label();
private Label averageScore = new Label();
private GridPane grid = new GridPane();
CustomCellHBox(String playerName, int totalScore, double averageScore) {
super();
this.playerName.setText(playerName);
this.totalScore.setText(String.valueOf(totalScore));
this.averageScore.setText(String.valueOf(averageScore));
grid.setHgap(10);
grid.setVgap(4);
this.playerName.setMaxWidth(Double.MAX_VALUE);
this.averageScore.setMaxWidth(Double.MAX_VALUE);
this.totalScore.setMaxWidth(Double.MAX_VALUE);
grid.add(this.playerName,0,0);
grid.add(this.totalScore,0,1);
grid.add(this.averageScore,0,2);
this.setHgrow(grid,Priority.ALWAYS);
this.getChildren().addAll(grid);
}
}
使用时listcell工作正常。但它不是我想要的。
grid.add(this.playerName,0,0);
grid.add(this.totalScore,1,0);
grid.add(this.averageScore,2,0);
结果:
答案 0 :(得分:-1)
也许controlFX的SpreadSheetView是一种很好的方法:http://fxexperience.com/controlsfx/features/#spreadsheetview