<?import javafx.scene.layout.GridPane?>
<GridPane fx:controller="sample.Controller"
xmlns:fx="http://javafx.com/fxml" alignment="center" hgap="10" vgap="10">
<fx:include fx:id="editorPane" source="editor.fxml"/>
</GridPane>
<?import javafx.scene.control.TextArea?>
<TextArea fx:id="editor" prefWidth="500" prefHeight="400"
fx:controller="sample.EditorController"
xmlns:fx="http://javafx.com/fxml"/>
editor.fxml,使用fx:root
:
<fx:root type="javafx.scene.control.TextArea"
fx:id="editor" prefWidth="500" prefHeight="400"
fx:controller="sample.EditorController"
xmlns:fx="http://javafx.com/fxml"/>
实际上,我找不到这两种代码有什么不同。我错过什么了吗?
为使用FXML定义可重用组件提供了解决方案。
例如,假设您想定义一个简单的自定义组件,该组件由TextField
和Button
包含在Hbox
中。您需要用node
的子类来表示,这样就可以编写如下代码
VBox vbox = new VBox();
vbox.getChildren().add(new MyComponent());
问题是您需要一个Java类,它是node
的子类,以及FXML。在纯Java中(没有FXML),您可以使用:
public class MyComponent extends HBox {
private TextField textField ;
private Button button ;
public MyComponent() {
textField = new TextField();
button = new Button();
this.getChildren().addAll(textField, button);
}
}
<HBox>
<TextField fx:id="textField"/>
<Button fx:id="button" />
</HBox>
public class MyComponent extends HBox {
@FXML
private TextField textField ;
@FXML
private Button button ;
public MyComponent() {
try {
FXMLLoader loader = new FXMLLoader(getClass().getResource("MyComponent.fxml"));
loader.setController(this);
HBox hbox = loader.load();
this.getChildren().add(hbox);
} catch (IOException exc) {
// handle exception
}
}
}
这将导致MyComponent包含一个HBox包装,一个HBox包装TextField和Button。额外的、冗余的HBox是需要一个节点作为FXML根和一个节点来表示组件的结果。
提供了一种机制,用于将节点创建为组件(Java类),然后指示FXML文件使用该节点作为根:
<fx:root type="javafx.scene.layout.HBox">
<TextField fx:id="textField" />
<Button fx:id="button" />
</fx:root>
和
public class MyComponent extends HBox {
@FXML
private TextField textField ;
@FXML
private Button button ;
public MyComponent() {
try {
FXMLLoader loader = new FXMLLoader(getClass().getResource("MyComponent.fxml"));
loader.setController(this);
loader.setRoot(this);
loader.load();
} catch (IOException exc) {
// handle exception
}
}
}
问题内容: 我是一个初学者,现在我想用java启动GUI应用程序。我开始阅读一些有关FX的书籍,但并未在JDK11上编译..我是否需要使用jdk8还是有什么办法可以在jdk11上完成? 问题答案: JavaFX已脱离JDK11(Oracle的官方JDK和OpenJDK)的捆绑。为了将JavaFX与JDK11结合使用,您必须下载独立的JavaFX11运行时。
问题内容: 我想编写一个非常简单的Java 3D编辑器(用于实验)。我了解JavaFX的基本用法,并且了解足够的OpenGL知识。但是我所有的OpenGL经验都是来自使用C / C ++。 我可以在JavaFx应用程序中制作“画布”并在其上映射OpenGL视口吗? 问题答案: 在内部,JavaFX可以将OpenGL用作渲染管道,因此需要在两者之间进行一些集成以避免冲突。 JavaFX中的OpenG
问题内容: 我已经安装好了。 JavaFX的下载页面显示以下内容: JavaFX 2.2.7包含最新的安全修复程序,并且与适用于Windows,Mac和Linux的最新JDK 7捆绑在一起。 使用JavaFX 2.2.7下载Java SE 7 像一个不错的菜鸟一样,我按照说明进行操作并安装了JDK。现在,当我寻找可以作为用户库导入到Eclipse的文件时,找不到了。JDK的文件夹中还有一些其他相关
我已经安装了。
问题内容: Python 2.7+中是否存在一种进行以下操作的方法? 我知道您只要使用’if’就可以做任何事情: 问题答案: 您已经知道了:是有效的Python表达式。所示的dict理解的唯一问题是dict理解中表达式的位置必须有两个表达式,并用冒号分隔: final子句充当过滤器,这与具有条件表达式不同。
问题内容: 因此,Scala应该和Java一样快。我正在重新研究最初在Java中解决的Scala Project Euler 问题。特别是问题5:“能被从1到20的所有数字均分的最小正数是多少?” 这是我的Java解决方案,需要0.7秒才能在计算机上完成: 这是我对Scala的“直接翻译”,需要103秒(长147倍!) 最后,这是我进行函数式编程的尝试,该过程需要39秒(长55倍) 在Window