如何在javafx TreeView中创建一些粗体节点?

时间:2015-04-17 14:57:11

标签: java user-interface javafx

如何在javax TreeView中显示带子项粗体的节点名称? (保留节点应以非粗体显示)

1 个答案:

答案 0 :(得分:2)

在树上使用单元工厂,根据显示的树项是否为叶,在其创建的树单元上设置CSS伪类的状态。然后,您可以使用外部css文件以任何方式设置叶节点和非叶节点的样式。

示例:

import javafx.application.Application;
import javafx.css.PseudoClass;
import javafx.scene.Scene;
import javafx.scene.control.TreeCell;
import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeView;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;

public class BoldNonLeafNodes extends Application {  
    @Override  
    public void start(Stage primaryStage) throws Exception {  
        final BorderPane uiRoot = new BorderPane();  

        TreeItem<Integer> root = createTreeItem(1);

        final TreeView<Integer> tree = new TreeView<>(root);  

        PseudoClass leaf = PseudoClass.getPseudoClass("leaf");
        tree.setCellFactory(tv -> {
            TreeCell<Integer> cell = new TreeCell<>();
            cell.itemProperty().addListener((obs, oldValue, newValue) -> {
                if (newValue == null) {
                    cell.setText("");
                } else {
                    cell.setText(newValue.toString());
                }
            });
            cell.treeItemProperty().addListener((obs, oldTreeItem, newTreeItem) -> 
                cell.pseudoClassStateChanged(leaf, newTreeItem != null && newTreeItem.isLeaf()));
            return cell ;
        });

        uiRoot.setCenter(tree);  

        final Scene scene = new Scene(uiRoot);  
        scene.getStylesheets().add("bold-non-leaf-nodes.css");

        primaryStage.setScene(scene);  
        primaryStage.setTitle(getClass().getSimpleName());  
        primaryStage.show();  
    }  

    private TreeItem<Integer> createTreeItem(int value) {
        TreeItem<Integer> item = new TreeItem<>(value);
        if (value < 10000) {
            for (int i=0; i<10; i++) {
                item.getChildren().add(createTreeItem(10*value+i));
            }
        }
        return item ;
    }

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

粗体非叶-nodes.css:

.tree-cell {
    -fx-font-weight: bold ;
}
.tree-cell:leaf {
    -fx-font-weight: normal ;
}