我希望能够制作一个java类,扩展窗格左右,然后给它分配子项和动作,比如旁边有一个textfield的滑块,显示值。我知道在scene builder应用程序中,可以通过直接将带有类和依赖项的jar文件导入到scene builder中,但我不知道如何在IntelliJ中的scene builder中做到这一点。
使用场景生成器
的方式没有区别。您只需在用户控件中添加属性(如果属性不是只读的,则使用getter和setter)。在这种情况下,属性将出现在Scene Builder
检查器中,您可以通过这些属性或直接编辑fxml
文件来操作这些属性。
下面是一个示例(Java8,但这不相关)
<fx:root type="javafx.scene.layout.HBox" xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml">
<Label fx:id="label"/>
<Slider fx:id="slider" HBox.hgrow="ALWAYS"/>
</fx:root>
public class MyControl extends HBox {
@FXML
private Label label;
@FXML
private Slider slider;
private StringProperty labelName = new SimpleStringProperty();
private DoubleProperty sliderPos = new SimpleDoubleProperty();
public MyControl() {
try {
FXMLLoader l = new FXMLLoader(getClass().getResource("mycontrol.fxml"));
l.setController(this);
l.setRoot(this);
l.load();
}
catch (IOException e) {
e.printStackTrace();
}
}
@FXML
private void initialize() {
slider.setMin(0.0);
slider.setMax(100.0);
label.textProperty().bindBidirectional(labelName);
slider.valueProperty().bindBidirectional(sliderPos);
}
public String getLabelName() {
return labelName.get();
}
public StringProperty labelNameProperty() {
return labelName;
}
public void setLabelName(String labelName) {
this.labelName.set(labelName);
}
public double getSliderPos() {
return sliderPos.get();
}
public DoubleProperty sliderPosProperty() {
return sliderPos;
}
public void setSliderPos(double sliderPos) {
this.sliderPos.set(sliderPos);
}
}
<AnchorPane xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8.0.121" fx:controller="sample.Controller">
<MyControl labelName="Test name" sliderPos="25.0" />
</AnchorPane>
我目前的解决方案是在独立的场景构建器中打开它。
我有个小问题。我在一个博客上看到,你必须从一个自定义组件创建一个.jar并将该文件加载到scene builder中,但是在我的项目中,所有的自定义组件都在主项目中,难道我必须从项目中创建一个.jar并导入它吗,因为这看起来很奇怪。非常感谢。
我开始在JavaFX应用程序中使用Ikonli。我将它添加到我的依赖项中: 然后我将它添加到我的FXML中: 但添加后,场景构建器就不能再加载文件了。我得到这个错误: 我错过了什么?我该怎么做才能让这件事成功?
请用简单的语言回答以上问题。如果可能的话,为我提供一些如何使用JavaFX的好教程。
Edit:按照@Fabian的建议更改了java类,我以前确实尝试过,得到了上面提到的这个错误。
我使用的是JavaFX Scene Builder2.0。版本,我想在TabPane控制器下导入一个FXML文件。我的想法是,我将拥有一种包含TabPane的容器FXML文件,并为选项卡中的内容创建单独的FXML文件。当我尝试导入FXML文件时,我想在其中添加的内容在一个选项卡下,场景构建器给出错误消息“Failed to import tabcontents.FXML under TabPane