如何在没有 FXML 的情况下创建自定义复合控件?

我想创建代表复合控件的类。这将是包含其他控件(如 TextFields 等)的 HBox。


我知道可以像本教程中那样使用 FXML 来完成,但我想不使用它。


这是我解决这个问题


的方法:复合控制类


public class VInputText extends HBox {


    private HBox hbox;

    private FontAwesomeIconView icon;

    private TextField textField;

    private Label label;


    public VInputText(double spacing) {


        hbox = new HBox(spacing);

        hbox.setAlignment(Pos.CENTER_LEFT);

        hbox.setPrefSize(Control.USE_COMPUTED_SIZE, Control.USE_COMPUTED_SIZE);


        icon = new FontAwesomeIconView();

        icon.setGlyphName("TIMES");

        icon.setSize("1.3em");


        textField = new TextField();


        label = new Label("<- my validated field");


        hbox.getChildren().addAll(icon, textField, label);

    }

}

FXML


<AnchorPane prefHeight="300.0" prefWidth="400.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="pl.edu.utp.wtie.controllers.AppController">

   <children>

      <VBox fx:id="vBox" prefHeight="300.0" prefWidth="400.0" spacing="5.0" />

   </children>

</AnchorPane>

控制器


public class AppController {


    @FXML

    private VBox vBox;


    @FXML

    void initialize() {

        System.out.println("AppController.java");


        VInputText input = new VInputText(5);


        vBox.getChildren().add(input);


    }

}

问题是应用程序正在编译,但复合控件未显示在场景中。如果需要剩余的代码,那么我可以粘贴它。提前致谢。


元芳怎么了
浏览 115回答 1
1回答

眼眸繁星

我正在粘贴某人解决的解决方案,但答案已被删除。而不是创建HBox应该使用这个关键字:public class VInputText extends HBox {&nbsp; &nbsp; private FontAwesomeIconView icon;&nbsp; &nbsp; private TextField textField;&nbsp; &nbsp; private Label label;&nbsp; &nbsp; public VInputText(double spacing) {&nbsp; &nbsp; &nbsp; &nbsp; this.setSpacing(spacing);&nbsp; &nbsp; &nbsp; &nbsp; this.setAlignment(Pos.CENTER_LEFT);&nbsp; &nbsp; &nbsp; &nbsp; this.setPrefSize(Control.USE_COMPUTED_SIZE, Control.USE_COMPUTED_SIZE);&nbsp; &nbsp; &nbsp; &nbsp; icon = new FontAwesomeIconView();&nbsp; &nbsp; &nbsp; &nbsp; icon.setGlyphName("TIMES");&nbsp; &nbsp; &nbsp; &nbsp; icon.setSize("1.3em");&nbsp; &nbsp; &nbsp; &nbsp; textField = new TextField();&nbsp; &nbsp; &nbsp; &nbsp; label = new Label("<- my validated field");&nbsp; &nbsp; &nbsp; &nbsp; this.getChildren().addAll(icon, textField, label);&nbsp; &nbsp; }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java