Css JavaFX8:TreeView风格的问题
我在尝试CSS样式化树状视图时遇到了这个问题。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; } 但正如您所见,第二幅图像中的空单元格
此树视图可过滤以仅显示我正在查找的项目。
这是树在没有任何过滤的情况下显示时的外观 下面是当一个过滤器处于活动状态时的情况 我希望所有扩展节点都有彩色背景(本例中为绿色)。
因此,我添加了一个样式表,其中包含以下代码
.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试过你的例子,这两个版本都有效。