我在javafx中设计了一个独立的应用程序(FXML with scenebuilder 8),现在我需要在FXML中创建一个CheckBoxTreeItem(在下图中看)。
在搜索时我得到了一个链接“https://docs.oracle.com/javase/8/scene-builder-2/user-guide/library-panel.htm”,它帮助我将自定义的CheckBoxTreeItem java文件导入到场景构建器中,但在场景构建器中导入JAR分析报告后会抛出错误消息“not a node”。
有人可以帮我解决这个问题,还是有其他方法可以在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();
}
}
答案 0 :(得分:2)
在某种程度上,做你所要求的事情并没有任何意义。 FXML的目的是为您的应用程序定义布局(即视图)。 CheckBoxTreeItem
和TreeItem
一般不是布局的一部分;它们是应用程序中显示的数据的一部分(即模型的一部分)。
话虽如此,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);
}
}
我强烈怀疑你可以在Scene Builder中使用这个FXML,因为Scene Builder是一个设计布局的工具,而不是一个操作应用程序数据内容的工具。