gpt4 book ai didi

css - 带有 JavaFX 的 ListView 中的颜色特定行

转载 作者:太空宇宙 更新时间:2023-11-04 10:37:24 26 4
gpt4 key购买 nike

我正在使用 JavaFX 和一个 String 的 ListView,例如我在这个列表中有 10 行,在另一个函数中进行了特定的验证,我在第 3 行和第 7 行遇到了错误。

我想要的是将第 3 行和第 7 行的单元格背景涂成红色,以便向我的用户表明这一行/行不好。

我检查了 setCellfactory 和我 @Override updateItem 但我找不到如何为多个特定行/行着色。

我不知道如何选择这一行以放置不同的 CSS 样式或简单地用 Java 为其着色。

预先感谢您的帮助。

已编辑

实际上我正在尝试那样做......

 ListViewCenter().setCellFactory(new Callback<ListView<String>,   ListCell<String>>() {

@Override
public ListCell<String> call(ListView<String> list) {
final ListCell<String> cell = new ListCell<String>();

for (int i = 0; i < Analyse.linesErrorsList.size(); i++) {

if (cell.getIndex() == Analyse.linesErrorsList.get(i)) {

cell.setStyle("-fx-text-fill:red;");

}

}

return cell;
}
});

我的 Analyse.linesErrorsList 是错误行的列表 ...

已编辑

一个解决方案是

listViewCenter().setCellFactory(list -> {
// usual list cell:
ListCell<String> cell = new ListCell<String>() {
@Override
protected void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
setText(empty ? null : item);
}
};

BooleanBinding invalid = Bindings.createBooleanBinding(
() -> Analyse.linesErrorsList.contains(new Integer(cell.getIndex())),
cell.indexProperty(), Analyse.linesErrorsList
);

invalid.addListener((obs, wasInvalid, isNowInvalid) -> {
if (isNowInvalid) {
cell.setStyle("-fx-text-fill:red;");
} else {
cell.setStyle("");
}
});

return cell ;
});

@James_D 你能再帮我一下吗,当我向下滚动到列表的末尾并返回到开头时,我遇到了一个问题......

显然我的 Listview 调用了 CellFactory 但它没有使用我的 CellFactory 的 @Override ... 我的 listview 似乎使用默认的 ...

我如何告诉我的 ListView 使用我的 CellFactory 的 @Override ...提前致谢...

已编辑

所以这是我向您展示的最少代码:)

package test;

import javafx.application.Application;
import javafx.beans.binding.Bindings;
import javafx.beans.binding.BooleanBinding;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.ListCell;
import javafx.scene.control.ListView;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class thisMy extends Application {

static ListView<String> listview;

@Override
public void start(Stage primaryStage) {

listview = new ListView<String>();
ObservableList<String> listOfString = FXCollections.observableArrayList();
ObservableList<Integer> errorList = FXCollections.observableArrayList();

for (int i = 0; i < 1000; i++) {
listOfString.add("This my line" + i);
}

errorList.addAll(0, 2, 5, 78, 598, 124, 368, 888, 997, 614, 741);
listview.setItems(listOfString);

listview.setCellFactory(list -> {
// usual list cell:
ListCell<String> cell = new ListCell<String>() {
@Override
protected void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
setText(empty ? null : item);
}
};

BooleanBinding invalid = Bindings.createBooleanBinding(
() -> errorList.contains(new Integer(cell.getIndex())), cell.indexProperty(), cell.itemProperty(),
errorList);

invalid.addListener((obs, wasInvalid, isNowInvalid) -> {
if (isNowInvalid) {
cell.setStyle("-fx-text-fill:red;");
} else {
cell.setStyle("");
}
});

return cell;
});

primaryStage.setTitle("Test for listview");
StackPane root = new StackPane();
root.getChildren().add(listview);
primaryStage.setScene(new Scene(root, 300, 250));
primaryStage.show();
}

public static void main(String[] args) {
launch(args);
}
}

最佳答案

你可以这样做:

listViewCenter().setCellFactory(list -> new ListCell<String>() {

BooleanBinding invalid ;

{
invalid = Bindings.createBooleanBinding(
() -> Analyse.linesErrorsList.contains(new Integer(getIndex())),
indexProperty(), itemProperty(), Analyse.linesErrorsList
);

invalid.addListener((obs, wasInvalid, isNowInvalid) -> {
if (isNowInvalid) {
setStyle("-fx-text-fill:red;");
} else {
setStyle("");
}
});

}
@Override
protected void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
setText(empty ? null : item);
}
});

关于css - 带有 JavaFX 的 ListView 中的颜色特定行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36061089/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com