【发布时间】:2016-03-21 01:17:52
【问题描述】:
我使用列表视图作为排行榜并显示球员姓名和总分,这是由字符串完成的。但我想自定义列表视图,使其也包含位置和平均分。我在下面提供了我想要的草图。
现在,我正在向 Observable 列表添加一个纯字符串并在列表视图中查看它,但无法自定义它。我不确定如何实际做到这一点,最好的方法是什么?使用 css 还是 javafx?我确实有一些关于列表视图的问题,例如是否可以有一个静态标题,比如一个 tableview?
更新
我尝试创建一个自定义 HBox 单元并尝试使用它,但似乎我做错了什么。我尝试使用网格窗格来调整文本位置。但是 Listview 看起来像这样。
我在其中添加了两名球员(Jonny 得到 59 分,Mike 得到 15 分)
我已经看到人们使用 listcell (Link) 而不是 Hbox 的示例,但我选择这种方式的原因是因为我想在按 totalScore 对 playerStats 数组进行排序后传递 playerName、totalScore 和 average。因此列表视图可以按总分的升序显示玩家。如果有更好的方法,请分享。
控制器类
全局字段:
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);
结果:
【问题讨论】:
-
对于标题,我只需在 vbox 中放置一个标签和列表视图,标签显示静态标题。对于显示,您将需要一个自定义列表单元实现,以及(对于最灵活的方法)和一些 CSS。可能你需要尝试这个并发布一个更具体的问题。
-
阅读 Oracle JavaFX 文档:Customizing the Content of a List View
-
@James_D 和jewelsea 我认为你的两个cmets都是非常好的答案。
-
是的,JohnW,但 StackOverflow 并不真正鼓励 link-only answers,因此评论。
-
@jewelsea 和 James_D 已经添加了迄今为止的进展更新,如果你们可以查看并给我反馈,那就太棒了。
标签: listview javafx customization