Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JavaFXCSS中选择.list单元格_Css_Javafx - Fatal编程技术网

如何在JavaFXCSS中选择.list单元格

如何在JavaFXCSS中选择.list单元格,css,javafx,Css,Javafx,有人能告诉我,我如何设计1个ListView的列表单元格吗 我有两个列表视图。一个id=“#一”和id=“#二” 现在我想对每个ListView的列表单元格设置不同的样式 .list-cell { -fx-text-fill: rgba(16, 27, 49, 0.8); -fx-background-color: transparent; } 这是我的“.list cell”,它覆盖了所有列表单元格。但我不想那样 这就是我所尝试的: #one.list-view.list-c

有人能告诉我,我如何设计1个ListView的列表单元格吗

我有两个列表视图。一个id=“#一”和id=“#二”

现在我想对每个ListView的列表单元格设置不同的样式

.list-cell {
    -fx-text-fill: rgba(16, 27, 49, 0.8);
    -fx-background-color: transparent;
}
这是我的“.list cell”,它覆盖了所有列表单元格。但我不想那样

这就是我所尝试的:

#one.list-view.list-cell
#one.list-view > list-cell
#one > list-view > list-cell
#one > list-view.list-cell
#one .list-view .list-cell
#one.list-cell
#one > list-cell
#one .list-cell
#one > .list-cell
什么都不管用


现在这是在浪费时间。CSS是否在JavaFX中工作?我不想使用代码来设置元素的样式。

JavaFX外部CSS文件中的选择器遵循与HTML中CSS相同的结构规则

基本上:

#name
选择id为
名称的任何节点

.name
选择具有CSS类
名称的任何节点

.name
两个没有空格的选择器串联在一起,可以选择与这两个选择器匹配的任何单个节点,因此

#one.list-cell
仅当节点id为
one
且具有CSS类
列表单元格
等时,才会选择该节点

selector1 > selector2
选择与
选择器2
匹配的节点,该节点是与
选择器1
匹配的节点的直接子节点,因此

#one > .list-cell
#one .list-cell
选择具有CSS类
列表单元格的任何节点,该节点是id为
one
的节点的直接子节点

最后,

selector1 selector2
选择任何与
选择器2
匹配的节点,该节点是与
选择器1
匹配的节点的后代,因此

#one > .list-cell
#one .list-cell
选择具有CSS类
列表单元格
的任何节点,该节点是id为
one
的节点的后代(直接或非直接)

参考,您可以看到
ListView
ListCell
s作为非直接子体。确切地说,它有一个子类CSS class
virtualflow
,而这个子类又有一个子类CSS class
clipped container
,这个子类有
ListCell
子类,它有以下所有CSS类:
cell
索引单元格
,和
列表单元格

因此,如果您的
列表视图
有一个id
一个
,那么您可以使用

#one .list-cell

(后者的性能可能会更好,因为CSS引擎不必在场景图层次结构中任意搜索;但是,第一个版本几乎适用于所有用例)

以下是SSCCE:

import java.util.stream.IntStream;

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.ListView;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;

public class MultipleListViewStyleTest extends Application {

    @Override
    public void start(Stage primaryStage) {
        ListView<String> firstList = new ListView<>();
        ListView<String> secondList = new ListView<>();

        firstList.setId("one");
        secondList.setId("two");

        IntStream.rangeClosed(1, 20).mapToObj(i -> "Item "+i).forEach(s -> {
            firstList.getItems().add(s);
            secondList.getItems().add(s);
        });

        HBox root = new HBox(10, firstList, secondList);
        root.setPadding(new Insets(20));
        root.setAlignment(Pos.CENTER);

        Scene scene = new Scene(root, 600, 600);
        scene.getStylesheets().add("multiple-list-view-style-test.css");

        primaryStage.setScene(scene);
        primaryStage.show();
    }

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

正确的选择器是一个列表单元格。这对我来说很好。您可以创建一个吗?当您编写
id=“#one”
时,您可以通过调用
listView.setId(“one”)来实现这一点,对吗?不是
listView.setId(“#one”)
(这显然是不正确的)?同样,如果你发布你正在使用的代码,这确实很有帮助。@James\u D我在xml结构文件中定义它,请发布代码。没有人能帮你找出你做错了什么。大家好,似乎是空间。工作!谢谢