2016-05-30 6 views
1

CSSスタイルにTreeViewを適用しようとすると、この問題が発生します。
このツリービューは、私が探しているアイテムだけを表示するためにフィルタリング可能です。
これは、ツリーは任意のフィルタリング enter image description hereJavaFX8:TreeViewスタイルの問題

をせずに表示されたときに、それがどのように見えるかであり、ここで私が色を持っているすべての展開されたノードを持っていると思った enter image description here

アクティブフィルタがあるとき、それは、どのように見えるかです背景(この例では緑色)。
は、だから私は、次のコード

.search-tree .tree-cell:expanded { 
    -fx-background-color: green; 
    -fx-text-fill: white; 
} 

を含むスタイルシートを追加しました。しかし、あなたが見ることができるように、第二画像内の空のセルはまだでも、それにはコンテンツがありません着色されています。
また、ScenicViewでコンポーネントをチェックしましたが、実際にはpseudoClassStateはまだ「拡張」されています。 enter image description here

この空のセルがまだこの状態にある理由を知っている人はいますか?

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 1.8.0_77b3

+0

... – Buddy

+0

私は両方それが動作中に、JavaFX8とJavaFX2.2であなたの例を試してみました。 – DVarga

答えて

0

を使ってMacOSXの10.11でこの問題を持っています。単純に次のスタイルを追加し、期待どおりに動作していた状態

.search-tree .tree-cell:empty { 
    -fx-background-color: transparent; 
    -fx-text-fill: white; 
} 

を定義することにより 。 私もテーブルビューのと同様の問題を見てきましたenter image description here

関連する問題