JavaFX-自定义ListView外观

JavaFX-自定义ListView外观,listview,javafx,customization,Listview,Javafx,Customization,我使用listview作为排行榜,显示玩家姓名和总分,这是由一个字符串完成的。但是我想定制listview,这样它也包括位置和平均分数。我已经在下面提供了一个我想要的草图 现在,我正在向可观察列表添加一个普通字符串,并在listview上查看它,但在自定义它时遇到了困难。我不知道该怎么做,最好的方法是什么?使用css还是javafx?我确实有一些关于listview的问题,比如是否可以有一个静态标题,比如tableview 更新 我曾尝试创建一个自定义HBox细胞,并尝试使用它,但似乎我做了一

我使用listview作为排行榜,显示玩家姓名和总分,这是由一个字符串完成的。但是我想定制listview,这样它也包括位置和平均分数。我已经在下面提供了一个我想要的草图

现在,我正在向可观察列表添加一个普通字符串,并在listview上查看它,但在自定义它时遇到了困难。我不知道该怎么做,最好的方法是什么?使用css还是javafx?我确实有一些关于listview的问题,比如是否可以有一个静态标题,比如tableview

更新

我曾尝试创建一个自定义HBox细胞,并尝试使用它,但似乎我做了一些错误的事情。我尝试使用网格窗格来调整文本位置。但是Listview看起来像这样

我增加了两名球员(乔尼59分,迈克15分)

我见过使用listcell而不是Hbox的人的例子,但我之所以选择这种方式,是因为我想通过playerName、totalScore&average,然后按totalScore对playerStats数组进行排序。因此,listview可以按球员总得分的升序显示球员。如果有更好的方法,请分享

控制器类

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


}
全局字段:

ListView<CustomCellHBox> leaderBoard = new ListView<CustomCellHBox>();
ObservableList<CustomCellHBox> rank = FXCollections.observableArrayList();
当我使用时,listcell工作正常。但这并不是我想要的

  grid.add(this.playerName,0,0);
        grid.add(this.totalScore,1,0);
        grid.add(this.averageScore,2,0);
结果:


也许controlsFX的电子表格视图是一种很好的方法:

对于标题,我只需在vbox中放置一个标签和列表视图,标签显示静态标题。对于显示,您将需要一个自定义列表单元格实现,以及一些CSS(对于最灵活的方法)。也许你需要试试这个,然后发布一个更具体的问题。阅读Oracle JavaFX文档:@James_D和jewelsea我认为你的两条评论都是非常好的答案。是的,JohnW,但是StackOverflow并不真正鼓励你,因此有了这个评论。@jewelsea和James_D已经添加了一个到目前为止的进度更新,如果你们能检查一下并给我一个反馈,那就太棒了。
  grid.add(this.playerName,0,0);
        grid.add(this.totalScore,1,0);
        grid.add(this.averageScore,2,0);