繁体   English   中英

javafx.fxml.LoadException: StackPane 不是有效类型

[英]javafx.fxml.LoadException: StackPane is not a valid type

我需要将 BorderPane 包含在 StackPane 中。 对于使用 JFXDialog 框。 JFXDialog() 的第一个参数需要是 StackPane 变量。 我不能传递 BorderPane 变量而不是那个。 所以我尝试在 BorderPane 周围创建一个新的 StackPane 标签

示例.fxml

<StackPane fx:id="rootPane" xmlns="http://javafx.com/javafx/8.0.112-ea"
    xmlns:fx="http://javafx.com/fxml/1">
    <BorderPane maxHeight="-Infinity" maxWidth="-Infinity"
        minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0"
        prefWidth="600.0" style="-fx-background-color: #181818;" xmlns="http://javafx.com/javafx/16"
        xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.SampleController">
        <left>
          .........
          .........
    </BorderPane>
</StackPane>

但是在周围添加此标记后,Sample.fxml 未使用 SceneBuilder 打开,当我尝试运行 JavaFx Main 类时,出现此错误。

javafx.fxml.LoadException: StackPane is not a valid type.

示例控制器.java

....
public class SampleController implements Initializable {

...
@FXML
private StackPane rootPane; 

@FXML
    private void migrateButtonAction(ActionEvent event){
        JFXDialogLayout  dialogLayout = new JFXDialogLayout();
        JFXDialog dialog = new JFXDialog(rootPane,dialogLayout, JFXDialog.DialogTransition.TOP);

        if(inputLocationField.getText() == ""){
            JFXButton button = new JFXButton("Okay..I'll Check");
            button.addEventHandler(MouseEvent.MOUSE_CLICKED, (MouseEvent mouseEvent) ->{
                dialog.close();
            });

            dialogLayout.setBody(new Text("Please Fill all the text boxes"));
            
        }
    }
}

大多数 IDE 在设计时会添加最少的导入集。 这意味着它将仅显式导入表单中正在使用的布局集。

重构布局时,最容易忘记的事情之一是向.fxml文件添加导入以支持新的布局类型。

在这种情况下,支持 StackPane 所需的最小更改是添加一个 import 语句:

<?import javafx.scene.layout.StackPane?>

.fxml文件的导入部分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM