有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我想创建一个表示复合控件的类。这将是HBox,它包含文本字段等其他控件

我知道它可以通过使用FXML来完成,就像在这个tutorial中一样,但我想在没有它的情况下完成

这是我解决这个问题的方法:

一类复合控制

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);

    }
}

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


共 (1) 个答案

  1. # 1 楼答案

    我正在粘贴某人解决的解决方案,但答案已被删除。与其创建HBox,不如使用这个关键字:

    public class VInputText extends HBox {
    
        private FontAwesomeIconView icon;
        private TextField textField;
        private Label label;
    
        public VInputText(double spacing) {
    
            this.setSpacing(spacing);
            this.setAlignment(Pos.CENTER_LEFT);
            this.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");
    
            this.getChildren().addAll(icon, textField, label);
        }
    }