如何在JavaFX中的TreeView单元格中使用FontAwesome图标?

时间:2017-11-22 15:11:22

标签: java javafx font-awesome

我正在阅读Oracle文档中的TreeView示例,这些示例显示了它们向单元格添加了图像图标。我想使用FontAwesome图标而不是图像。我将FA样式表应用于我的FXML文件,并且我有一个使用FA图标的单独按钮,所以我知道它有效。我的FontAwesome类属性只返回您选择的任何图标的unicode。我的应用程序根本不显示TreeView单元格中的图标。我做错了什么?

private final Node serverIcon = new Label(FontAwesome.SERVER);
private final Node dbIcon = new Label(FontAwesome.DATABASE);

TreeItem<String> root = new TreeItem<>("Available Connections");
        root.setExpanded(true);
        connTree.setCellFactory(tree -> {
            TreeCell<String> cell = new TreeCell<String>() {
                @Override
                public void updateItem(String item, boolean empty) {
                    super.updateItem(item, empty) ;
                    if (empty) {
                        setText(null);
                    } else {
                        setText(item);
                    }
                }
            };
            cell.setOnMouseClicked(event -> {
                if (!cell.isEmpty()) {
                    TreeItem<String> treeItem = cell.getTreeItem();
                    this.selectedServer = cell.getText();
                }
            });
            return cell;
        });
        for(Connection conn: conns){
            TreeItem<String> item = new TreeItem<String>(conn.host);
            item.setGraphic(serverIcon);
            root.getChildren().add(item);
        }
        connTree.setRoot(root);

2 个答案:

答案 0 :(得分:0)

我建议你查看http://fxexperience.com/controlsfx/ 它将ControlsFX嵌入到jar中。

您可以在java代码中使用它,也可以直接在FXML中使用它。

FXML示例:

<Button fx:id="btGamePage" maxHeight="15.0" mnemonicParsing="false" prefHeight="4.0" onAction="#viewGame" snapToPixel="false" styleClass="first" text="" HBox.hgrow="NEVER">
<graphic>
   <Glyph fontFamily="FontAwesome" icon="LINK"/>  
</graphic> </Button>

答案 1 :(得分:0)

以下是如何将图标作为 TreeView 添加到 TreeItem 的示例:

final var glyph = FontAwesomeIcon.valueOf( "BOOKMARK" );
final var icon = FontAwesomeIconFactory.get().createIcon( glyph, "1.2em" );
final var item = new TreeItem<>( "Item Description", icon );
tree.getRoot().getChildren().add( item );

其中 treeTreeView 实例。