如何在 Fxml 上添加自定义组件?
How to add a costum Component on Fxml?
我制作了一个服装按钮,但是如何在 fxml 文件中使用它?
我试图创建一个普通的 Button 并在控制器上执行类似“@FXML
private CrazyButton 按钮;”导致应用程序崩溃。
让我们以 CrazyButton 为例,如何在 fxml 文件中添加一个 costumComponent?
import javafx.scene.control.Button;
public class CrazyButton extends Button {
public CrazyButton(){
setText("Crazy");
}
}
这是我的 fxml 文件:
<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0"
fx:controller="sample.Controller" xmlns="http://javafx.com/javafx/8.0.112" xmlns:fx="http://javafx.com/fxml/1">
<children>
<!--I Wanted my costum button to be here-->
</children>
</Pane>
所以我可以在自己的控制器上使用它:
public class Controller {
@FXML
private CrazyButton button;
@FXML
private void initialize() {
}
}
JavaFX 库 class 在任何意义上都不是 "privileged" FXML; FXMLLoader
以相同的方式实例化所有 classes。您只需要确保您的自定义 class 在一个包中(无论如何使用 "default package" 是非常糟糕的做法),然后将其导入 FXML 并以与您完全相同的方式使用它任何其他 class。如果您的 class 在包裹 my.package
中,则看起来像
<?import javafx.scene.layout.Pane ?>
<?import my.package.CrazyButton ?>
<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0"
fx:controller="sample.Controller" xmlns="http://javafx.com/javafx/8.0.112" xmlns:fx="http://javafx.com/fxml/1">
<children>
<CrazyButton fx:id="button" />
</children>
</Pane>
我制作了一个服装按钮,但是如何在 fxml 文件中使用它? 我试图创建一个普通的 Button 并在控制器上执行类似“@FXML private CrazyButton 按钮;”导致应用程序崩溃。
让我们以 CrazyButton 为例,如何在 fxml 文件中添加一个 costumComponent?
import javafx.scene.control.Button;
public class CrazyButton extends Button {
public CrazyButton(){
setText("Crazy");
}
}
这是我的 fxml 文件:
<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0"
fx:controller="sample.Controller" xmlns="http://javafx.com/javafx/8.0.112" xmlns:fx="http://javafx.com/fxml/1">
<children>
<!--I Wanted my costum button to be here-->
</children>
</Pane>
所以我可以在自己的控制器上使用它:
public class Controller {
@FXML
private CrazyButton button;
@FXML
private void initialize() {
}
}
JavaFX 库 class 在任何意义上都不是 "privileged" FXML; FXMLLoader
以相同的方式实例化所有 classes。您只需要确保您的自定义 class 在一个包中(无论如何使用 "default package" 是非常糟糕的做法),然后将其导入 FXML 并以与您完全相同的方式使用它任何其他 class。如果您的 class 在包裹 my.package
中,则看起来像
<?import javafx.scene.layout.Pane ?>
<?import my.package.CrazyButton ?>
<Pane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0"
fx:controller="sample.Controller" xmlns="http://javafx.com/javafx/8.0.112" xmlns:fx="http://javafx.com/fxml/1">
<children>
<CrazyButton fx:id="button" />
</children>
</Pane>