我是javaFX的新手。我在java中创建了一个自定义的搜索框(扩展TextField),检查图像:
我用一个测试类测试了它,它工作正常。我想知道现在是否有可能创建它的FXML文件,而不是将此组件添加到场景生成器?怎么做?先谢谢你了。
yebdmbv41#
SceneBuilder 19的更新指南
有关创建自定义组件库并将其导入SceneBuilder 19的示例(包含示例代码和屏幕截图),请参阅:
此答案中关于创建自定义组件的许多要点仍然适用于以后的SceneBuilder版本,但有一些新的替代方法可以查找和导入JAR文件(其中一些方法的使用在上面的链接答案中进行了演示)。
如何将JAR中的组件导入场景构建器
您可以将组件放入Jar中并将其导入SceneBuilder。无需为组件创建FXML文件即可将其添加到SceneBuilder库面板。请参阅JavaFX用户指南的Adding Custom Components to the Library部分。
从JAR或FXML文件导入自定义GUI组件:
1.从“库”面板的菜单中选择导入JAR/FXML文件命令,或直接从系统的本机文件管理器(资源管理器或Finder)中拖动JAR或FXML文件并将其拖放到“库”面板中1.在“打开”对话框窗口中,定位到要导入的JAR或FXML文件的位置。此时将显示与图8-4所示类似的“导入”对话框。JAR文件的内容将被检查,所有被确定为合适的自定义组件的Java类都将显示在对话框窗口中。将分析FXML文件的内容,以确保添加的组件有效且自包含。1.在“导入”对话框窗口中,从能够导入的项目列表中选择或取消选择项目。1.单击**导入组件。**导入的项目将添加到“库”面板的“自定义”部分。它们可以立即使用,并且即使在场景生成器重新启动后也会保留在库中请注意,SceneBuilder还支持导入基于FXML的组件,而不仅仅是直接的代码组件。这个答案只讨论导入不包含FXML的纯代码组件。
导入组件使用示例
下面是一个自定义搜索字段组件,我使用上面概述的方法导入到SceneBuilder中。
顶部搜索面板位于场景生成器设计窗格中,底部搜索面板是使用场景生成器预览功能和搜索快乐的结果。
场景生成器生成代码示例
此处包含SceneBuilder根据设计生成的fxml文件。注意,这只是我用SceneBuilder创建的一个测试场景,用于测试已经导入的组件--它不是组件导入过程本身的一部分。
<?xml version="1.0" encoding="UTF-8"?> <?import javafx.scene.text.*?> <?import org.jewelsea.*?> <?import javafx.geometry.*?> <?import javafx.scene.control.*?> <?import java.lang.*?> <?import javafx.scene.layout.*?> <VBox maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" spacing="10.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"> <children> <Label text="Search Field Import Test"> <font> <Font size="16.0" /> </font> </Label> <SearchField /> </children> <padding> <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" /> </padding> </VBox>
示例(可导入)组件编码
导入的搜索框的代码为:
package org.jewelsea; import javafx.geometry.Insets; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.control.TextField; import javafx.scene.layout.HBox; import javafx.scene.layout.StackPane; import javafx.scene.layout.VBox; public class SearchField extends StackPane { private final TextField textField; private final Button searchButton; private final Label searchResults; public SearchField() { textField = new TextField(); textField.setPromptText( "Search Text" ); searchButton = new Button("Search"); searchResults = new Label(); VBox layout = new VBox( 20, new HBox( 10, textField, searchButton ), searchResults ); layout.setPadding(new Insets(10)); searchButton.setOnAction(event -> searchResults.setText( "Search result for " + textField.getText() ) ); getChildren().setAll( layout ); } }
组件先决条件
为了使该过程正常工作,您需要确保以下几点:1.组件类扩展Node。1.你的组件类有一个无参数构造函数。1.你的组件类和无参数构造函数是公共的。1.您的组件类位于一个包中(例如org.jewelsea)-它不能没有包集。1.组件类打包在JAR文件中,该文件已导入到SceneBuilder中,如上所述。
如果在尝试JAR导入后,您在导入JAR时遇到问题,您可以使用下面介绍的JAR分析功能来帮助进行故障排除(这可能会有所帮助,也可能只是提供一些模糊的信息,使您更加困惑)。
此外,从这个答案:
尝试从命令行启动场景生成器,您应该看到库导入的输出,包括添加自定义控件时可能出现的异常。
1条答案
按热度按时间yebdmbv41#
SceneBuilder 19的更新指南
有关创建自定义组件库并将其导入SceneBuilder 19的示例(包含示例代码和屏幕截图),请参阅:
此答案中关于创建自定义组件的许多要点仍然适用于以后的SceneBuilder版本,但有一些新的替代方法可以查找和导入JAR文件(其中一些方法的使用在上面的链接答案中进行了演示)。
如何将JAR中的组件导入场景构建器
您可以将组件放入Jar中并将其导入SceneBuilder。无需为组件创建FXML文件即可将其添加到SceneBuilder库面板。
请参阅JavaFX用户指南的Adding Custom Components to the Library部分。
从JAR或FXML文件导入自定义GUI组件:
1.从“库”面板的菜单中选择导入JAR/FXML文件命令,或直接从系统的本机文件管理器(资源管理器或Finder)中拖动JAR或FXML文件并将其拖放到“库”面板中
1.在“打开”对话框窗口中,定位到要导入的JAR或FXML文件的位置。此时将显示与图8-4所示类似的“导入”对话框。JAR文件的内容将被检查,所有被确定为合适的自定义组件的Java类都将显示在对话框窗口中。将分析FXML文件的内容,以确保添加的组件有效且自包含。
1.在“导入”对话框窗口中,从能够导入的项目列表中选择或取消选择项目。
1.单击**导入组件。**导入的项目将添加到“库”面板的“自定义”部分。它们可以立即使用,并且即使在场景生成器重新启动后也会保留在库中
请注意,SceneBuilder还支持导入基于FXML的组件,而不仅仅是直接的代码组件。这个答案只讨论导入不包含FXML的纯代码组件。
导入组件使用示例
下面是一个自定义搜索字段组件,我使用上面概述的方法导入到SceneBuilder中。
顶部搜索面板位于场景生成器设计窗格中,底部搜索面板是使用场景生成器预览功能和搜索快乐的结果。
场景生成器生成代码示例
此处包含SceneBuilder根据设计生成的fxml文件。注意,这只是我用SceneBuilder创建的一个测试场景,用于测试已经导入的组件--它不是组件导入过程本身的一部分。
示例(可导入)组件编码
导入的搜索框的代码为:
组件先决条件
为了使该过程正常工作,您需要确保以下几点:
1.组件类扩展Node。
1.你的组件类有一个无参数构造函数。
1.你的组件类和无参数构造函数是公共的。
1.您的组件类位于一个包中(例如org.jewelsea)-它不能没有包集。
1.组件类打包在JAR文件中,该文件已导入到SceneBuilder中,如上所述。
故障排除
如果在尝试JAR导入后,您在导入JAR时遇到问题,您可以使用下面介绍的JAR分析功能来帮助进行故障排除(这可能会有所帮助,也可能只是提供一些模糊的信息,使您更加困惑)。
此外,从这个答案:
尝试从命令行启动场景生成器,您应该看到库导入的输出,包括添加自定义控件时可能出现的异常。