当前位置: 首页 > 知识库问答 >
问题:

如何使用FXML在JavaFX中创建CheckBoxTreeItem

靳举
2023-03-14

我正在用javafx设计一个独立的应用程序(带有scenebuilder 8的FXML),现在我需要在FXML中创建一个CheckBoxTreeItem(查看下图)。

方格树

在搜索时,我得到了一个链接“https://docs.oracle.com/javase/8/scene-builder-2/user-guide/library-panel.htm这有助于我将定制的CheckBoxTreeItem java文件导入到场景生成器中,但在场景生成器中导入JAR分析报告后,会抛出一条错误消息“不是节点”。

有人能帮我解决这个问题吗?或者有没有其他方法可以在FXML中创建CheckBoxTreeItem。

下面是定制的CheckBoxTreeItem代码:

package Action;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.control.cell.CheckBoxTreeCell;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class ComboboxTree extends Application {

    public static void main(String[] args) {
        launch(args);
    }
    public void start(Stage primaryStage) {
        CheckBoxTreeItem<String> rootItem =
            new CheckBoxTreeItem<String>("Total list");
        rootItem.setExpanded(true);

        final TreeView tree = new TreeView(rootItem);
        tree.setEditable(true);

        tree.setCellFactory(CheckBoxTreeCell.<String>forTreeView());
        for (int i = 0; i < 8; i++) {
            final CheckBoxTreeItem<String> checkBoxTreeItem =
                new CheckBoxTreeItem<String>("List " + (i+1));
                    rootItem.getChildren().add(checkBoxTreeItem);
        }

        tree.setRoot(rootItem);
        tree.setShowRoot(true);

        StackPane root = new StackPane();
        root.getChildren().add(tree);
        primaryStage.setScene(new Scene(root, 300, 250));
        primaryStage.show();
    }
}

共有1个答案

淳于开畅
2023-03-14

在某种程度上,做你要求的事情没有任何意义。FXML的目的是定义应用程序的布局(即视图)。CheckBoxTreeItems和TreeItems通常不是布局的一部分;它们是应用程序中显示的数据的一部分(即模型的一部分)。

话虽如此,FXML只是实例化对象并将它们链接在一起的一种方式,所以没有理由不能使用FXML来做到这一点。以下是你发布的Java的等价物:

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.layout.HBox?>
<?import javafx.scene.control.TreeView?>
<?import javafx.scene.control.CheckBoxTreeItem?>
<?import javafx.scene.control.cell.CheckBoxTreeCell?>

<HBox xmlns:fx="http://javafx.com/fxml/1">
    <TreeView editable="true">
        <root>
            <CheckBoxTreeItem value="Total list" expanded="true">
                <children>
                    <CheckBoxTreeItem value="List 1"/>
                    <CheckBoxTreeItem value="List 2"/>
                    <CheckBoxTreeItem value="List 3"/>
                    <CheckBoxTreeItem value="List 4"/>
                    <CheckBoxTreeItem value="List 5"/>
                    <CheckBoxTreeItem value="List 6"/>
                    <CheckBoxTreeItem value="List 7"/>
                    <CheckBoxTreeItem value="List 8"/>
                </children>
            </CheckBoxTreeItem>
        </root>
        <cellFactory>
            <CheckBoxTreeCell fx:factory="forTreeView"/>
        </cellFactory>
    </TreeView>
</HBox>

你可以用它来测试

import java.io.IOException;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class Main extends Application {

    @Override
    public void start(Stage primaryStage) throws IOException {
        primaryStage.setScene(new Scene(FXMLLoader.load(getClass().getResource("TreeWithCheckBoxItems.fxml")), 600, 600));
        primaryStage.show();
    }

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

我强烈怀疑您能否将此FXML与场景生成器一起使用,因为场景生成器是一种用于设计布局的工具,而不是用于操作应用程序数据内容的工具。

 类似资料:
  • 实际上,我想使用Javafx中的标签创建一个导航列表。我可以为每个标签分配fx: id并在控制器类中创建标签。 但我想做的是,我想在控制器类中创建一个标签数组,而不是控制器类中的十个标签对象,这是我在场景生成器中创建的。 谁能帮我想个办法。。。

  • 我是新来的社区,我真的不知道如何在这里寻求帮助。我试图为我的警报弹出窗口创建一个关闭按钮,但我遇到了语法错误。我还想在窗口完全关闭之前执行一些操作。 这是调用窗口出现的驱动程序: 这是警报的控制器 这是警报的FXML文件 我还尝试使用setOnAction,但发生了相同的错误。 非常感谢!!

  • 本文向大家介绍如何在JavaFX中创建RadioMenuItem?,包括了如何在JavaFX中创建RadioMenuItem?的使用技巧和注意事项,需要的朋友参考一下 菜单是提供给用户的选项或命令的列表,通常菜单包含执行某些操作的项目。菜单的内容称为菜单项,菜单栏包含多个菜单。 JavaFx支持三种菜单项,即-检查菜单项,自定义菜单项和单选菜单项。 RadioMenuItem RadioMenuI

  • 本文向大家介绍如何在JavaFX中创建ButtonBar?,包括了如何在JavaFX中创建ButtonBar?的使用技巧和注意事项,需要的朋友参考一下 以下示例演示了ButtonBar的创建。 输出结果

  • 本文向大家介绍如何在JavaFX中创建MenuButton?,包括了如何在JavaFX中创建MenuButton?的使用技巧和注意事项,需要的朋友参考一下 一个菜单 是呈现给用户的选项或命令的列表,通常菜单中包含的执行某些操作的项目。菜单的内容称为菜单项,菜单栏包含多个菜单。 通常,按钮在用户界面应用程序中进行控制,单击该按钮将执行相应的操作。 MenuButton是一个简单的按钮,在单击它时显示

  • 本文向大家介绍如何在JavaFX中创建ProgressIndicator?,包括了如何在JavaFX中创建ProgressIndicator?的使用技巧和注意事项,需要的朋友参考一下 以下示例演示了 ProgressIndicator的创建。 输出结果