繁体   English   中英

如何在javafx TreeView中使某些节点加粗?

[英]How can I make some nodes bold in a javafx TreeView?

如何在javax TreeView中以粗体显示子节点的名称? (剩余节点应显示为非粗体)

根据所显示的树项是否为叶子,在树上使用单元工厂,在其创建的树单元上设置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);  
    }  
}  

粗体非叶子节点.css:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM