更改listView中特定元素的背景色(JavaFx)

更改listView中特定元素的背景色(JavaFx),java,javafx,Java,Javafx,我正在做一个项目,我想找到一种方法来改变listView中某些元素的背景色。我找到了一种将css样式类添加到listView中的方法,一般来说,这种方法不会添加到特定元素中 另外,我也听说过cell factory,但我不知道cell factory是否能在节目期间适应,或者只是在乞讨处设置一些东西 (我有一个我称之为player的对象的列表视图,我希望,当列表视图中的播放器获得足够的点数时,他的名字变成红色) 有没有办法做到这一点 ListView-ListView=。。。; 对于(播放器p:

我正在做一个项目,我想找到一种方法来改变listView中某些元素的背景色。我找到了一种将css样式类添加到listView中的方法,一般来说,这种方法不会添加到特定元素中

另外,我也听说过cell factory,但我不知道cell factory是否能在节目期间适应,或者只是在乞讨处设置一些东西

(我有一个我称之为player的对象的列表视图,我希望,当列表视图中的播放器获得足够的点数时,他的名字变成红色)

有没有办法做到这一点

ListView-ListView=。。。;
对于(播放器p:listView){
p、 addListener(//将颜色更改为红色)
} 
谢谢

我将使用并将Listener添加到给定列表中

示例代码:

import javafx.application.Application;
import javafx.collections.FXCollections;
import javafx.collections.ListChangeListener;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.ListView;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class App extends Application {
    private StackPane main;
    private ListView<Player> players;

    @Override
    public void start(Stage stage) {
        main = new StackPane();

        var scene = new Scene(main, 640, 480);

        players = new ListView<Player>();
        ObservableList<Player> playerObjs = FXCollections.observableArrayList (
                new Player("A", 50),
                new Player("B", 30),
                new Player("C", 60),
                new Player("D", 5),
                new Player("E", 0)
        );
        players.setItems(playerObjs);
        playerObjs.addListener(new ListChangeListener<Player>() {
            @Override
            public void onChanged(Change<? extends Player> change) {
                updateView();
            }
        });

        main.getChildren().add(players);
        stage.setScene(scene);
        stage.show();
    }

    public void updateView() {
        for(int i = 0; i < players.getItems().size(); i++) {
            if(players.getItems().get(i).getHp() < 10) {
                players.getItems().get(i).setBackground(...);
            }
        }
    }

    public static void main(String[] args) {
        launch();
    }
}    
导入javafx.application.application;
导入javafx.collections.FXCollections;
导入javafx.collections.ListChangeListener;
导入javafx.collections.ObservableList;
导入javafx.scene.scene;
导入javafx.scene.control.ListView;
导入javafx.scene.layout.StackPane;
导入javafx.stage.stage;
公共类应用程序扩展应用程序{
私人主楼;
私有ListView播放器;
@凌驾
公众假期开始(阶段){
main=新的堆栈窗格();
var场景=新场景(主场景,640480);
players=newlistview();
ObservableList playerObjs=FXCollections.observableArrayList(
新球员(“A”,50岁),
新球员(“B”,30岁),
新球员(“C”,60岁),
新玩家(“D”,5),
新玩家(“E”,0)
);
players.setItems(playerObjs);
playerObjs.addListener(新的ListChangeListener(){
@凌驾

更改公众假期(更改能否请您详细说明您的问题?您想更改哪个特定元素?如果您只想更改特定listView的颜色,为什么要添加一个侦听器?我有一个游戏,我有一个listView a游戏中的玩家,当他们的属性之一获取一个特定的值,侦听器只是一个示例,我不知道怎么做。完成一个关于如何使用ListView的教程-您需要一个自定义listCell,该listCell根据数据(=player)项的某些状态进行自我配置,该项在其中可视化,但很可能不是(尽管并非完全不可能;)…数据项不应包含任何视觉状态,如背景(正确的情况下,您的不应该),相反,它应该具有一些域状态,如f.i.health。不,如果数据/视图连接正确,则无需手动更新视图(此处称为updateView)(使用提取器配置observableList,并实现基于运行状况点配置其背景的自定义单元格)