Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/34.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
Css JavaFX8:TreeView风格的问题_Css_Treeview_Javafx 8 - Fatal编程技术网

Css JavaFX8:TreeView风格的问题

Css JavaFX8:TreeView风格的问题,css,treeview,javafx-8,Css,Treeview,Javafx 8,我在尝试CSS样式化树状视图时遇到了这个问题。 此树视图可过滤以仅显示我正在查找的项目。 这是树在没有任何过滤的情况下显示时的外观 下面是当一个过滤器处于活动状态时的情况 我希望所有扩展节点都有彩色背景(本例中为绿色)。 因此,我添加了一个样式表,其中包含以下代码 .search-tree .tree-cell:expanded { -fx-background-color: green; -fx-text-fill: white; } 但正如您所见,第二幅图像中的空单元格

我在尝试CSS样式化树状视图时遇到了这个问题。
此树视图可过滤以仅显示我正在查找的项目。
这是树在没有任何过滤的情况下显示时的外观

下面是当一个过滤器处于活动状态时的情况

我希望所有扩展节点都有彩色背景(本例中为绿色)。
因此,我添加了一个样式表,其中包含以下代码

.search-tree .tree-cell:expanded {
    -fx-background-color: green;
    -fx-text-fill: white;
}
但正如您所见,第二幅图像中的空单元格仍然是彩色的,即使其中没有内容。
我还用ScenicView检查了组件,实际上伪类状态仍然是“扩展的”。

有人知道为什么这个空单元格仍然处于这种状态吗

以下是我使用的示例代码:

import java.io.File;
import java.util.ArrayList;

import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeView;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class TreeTest extends Application {
    TreeView<Object> t;
    private TextField searchField;
    private TreeViewHelper helper;

    @Override
    public void start(Stage s) throws Exception {
        helper = new TreeViewHelper();
        t = new TreeView<>();
        t.getStyleClass().add("search-tree");
        TreeItem rootItem = new TreeItem("");

        TreeItem cars = new TreeItem("Cars");
        cars.getChildren().addAll(helper.getCars());
        cars.setExpanded(true);

        TreeItem buses = new TreeItem("Buses");
        buses.getChildren().addAll(helper.getBuses());
        buses.setExpanded(true);
        rootItem.setExpanded(true);
        rootItem.getChildren().add(cars);
        rootItem.getChildren().add(buses);
        t.setRoot(rootItem);
        t.setShowRoot(false);
        VBox root = new VBox();
        root.getChildren().add(t); 
        searchField = new TextField();
        searchField.textProperty().addListener(new ChangeListener<String>() {

            @Override
            public void changed(ObservableValue<? extends String> prop, String lastValue, String v) {

                scanItems();
            }
        });
        root.getChildren().add(searchField); 
        Scene scene = new Scene(root,400,400);
        scene.getStylesheets().add(new File("style.css").toURI().toURL().toExternalForm());
        s.setScene(scene);
        s.show();     
    }

    void scanItems()
    {
        t.getRoot().getChildren().clear();

        TreeItem cars = new TreeItem("Cars");
        helper.getCars().stream().filter(e -> e.getValue().toString().toLowerCase().contains(searchField.getText().toLowerCase()))
            .forEach(item -> cars.getChildren().add(item));
        t.getRoot().getChildren().add(cars);
        cars.setExpanded(true);

        TreeItem buses = new TreeItem("Buses");
        helper.getBuses().stream().filter(e -> e.getValue().toString().toLowerCase().contains(searchField.getText().toLowerCase()))
            .forEach(item -> buses.getChildren().add(item));
        t.getRoot().getChildren().add(buses);
        buses.setExpanded(true);

    }

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

    class TreeViewHelper 
    {
        public TreeViewHelper()
        {
        }

        // This method creates an ArrayList of TreeItems (Products)
        public ArrayList<TreeItem> getProducts()
        {
            ArrayList<TreeItem> products = new ArrayList<TreeItem>();

            TreeItem cars = new TreeItem("Cars");
            cars.getChildren().addAll(getCars());
            cars.setExpanded(true);

            TreeItem buses = new TreeItem("Buses");
            buses.getChildren().addAll(getBuses());
            buses.setExpanded(true);

            products.add(cars);
            products.add(buses);

            return products;
        }

        // This method creates an ArrayList of TreeItems (Cars)
        ArrayList<TreeItem> getCars()
        {
            ArrayList<TreeItem> cars = new ArrayList<TreeItem>();

            TreeItem ferrari = new TreeItem("Ferrari");
            TreeItem porsche = new TreeItem("Porsche");
            TreeItem ford = new TreeItem("Ford");
            TreeItem mercedes = new TreeItem("Mercedes");

            cars.add(ferrari);
            cars.add(porsche);
            cars.add(ford);
            cars.add(mercedes);

            return cars;        
        }

        // This method creates an ArrayList of TreeItems (Buses)
        ArrayList<TreeItem> getBuses()
        {
            ArrayList<TreeItem> buses = new ArrayList<TreeItem>();

            TreeItem gm = new TreeItem("GM");
            TreeItem vw = new TreeItem("VW");
            TreeItem man = new TreeItem("MAN");
            TreeItem volvo = new TreeItem("Volvo");

            buses.add(gm);
            buses.add(man);
            buses.add(volvo);
            buses.add(vw);

            return buses;       
        }

    }

}
导入java.io.File;
导入java.util.ArrayList;
导入javafx.application.application;
导入javafx.beans.value.ChangeListener;
导入javafx.beans.value.observeValue;
导入javafx.scene.scene;
导入javafx.scene.control.TextField;
导入javafx.scene.control.TreeItem;
导入javafx.scene.control.TreeView;
导入javafx.scene.layout.VBox;
导入javafx.stage.stage;
公共类TreeTest扩展了应用程序{
树景t;
私有文本字段搜索字段;
私人TreeviewWhelper助手;
@凌驾
public void start(阶段s)引发异常{
helper=new TreeViewHelper();
t=新树视图();
t、 getStyleClass().add(“搜索树”);
TreeItem rootItem=新的TreeItem(“”);
TreeItem汽车=新的TreeItem(“汽车”);
cars.getChildren().addAll(helper.getCars());
汽车。设置扩展(真);
TreeItem总线=新的TreeItem(“总线”);
bus.getChildren().addAll(helper.getbus());
总线。设置扩展(真);
setExpanded(true);
rootItem.getChildren().add(汽车);
rootItem.getChildren().add(总线);
t、 setRoot(rootItem);
t、 设置显示根(假);
VBox root=新的VBox();
root.getChildren().add(t);
searchField=newtextfield();
searchField.textProperty().addListener(新的ChangeListener()){
@凌驾

公共空间改变了(observeValue我想我找到了一个解决方案。 只需添加以下样式并定义状态

.search-tree .tree-cell:empty {
  -fx-background-color: transparent;
  -fx-text-fill: white;
}
它按预期工作。
我想我找到了解决办法。 只需添加以下样式并定义状态

.search-tree .tree-cell:empty {
  -fx-background-color: transparent;
  -fx-text-fill: white;
}
它按预期工作。

我也看到了TableView的类似问题。我用JavaFX8和JavaFX2.2试过你的例子,这两个版本都有效。我也看到了TableView的类似问题。我用JavaFX8和JavaFX2.2试过你的例子,这两个版本都有效。