连接Javafx:Id

连接Javafx:Id,javafx,concatenation,Javafx,Concatenation,我是JavaFX新手,目前正在尝试为一个学校项目做一个日历应用程序。我想知道是否有一种方法可以连接一个fx:id这样的 @FXML private Label Box01; (In function) String ExampleNum = "01"; (Box+ExampleNum).setText("Test"); 各种可能的解决办法: 你可以用,但那会很难看,我不建议这样做 通常,如果你有很多东西,你可以把它们放在一个集合中,比如列表或数组。标签将是某个布局窗格的子级,因此您可以获

我是JavaFX新手,目前正在尝试为一个学校项目做一个日历应用程序。我想知道是否有一种方法可以连接一个
fx:id
这样的

@FXML
private Label Box01;
 (In function)
 String ExampleNum = "01";
 (Box+ExampleNum).setText("Test");

各种可能的解决办法:

  • 你可以用,但那会很难看,我不建议这样做

  • 通常,如果你有很多东西,你可以把它们放在一个集合中,比如列表或数组。标签将是某个布局窗格的子级,因此您可以获取该窗格的子级,并使用以下内容按索引查找项目:

    ((Label) parent.getChildren().get(0)).setText("Text");
    
  • 如果标签已分配css id,则可以将其用于标签

    例如,在FXML中定义:

    <Label text="hello" fx:id="Box01" id="Box01"/>
    
  • 只需通过其引用引用该项目:

    @FXML private Label box01; 
    box01.setText("Test");
    

  • 旁白:除了@jewelsea提到的方法外,请按照使用驼峰箱。

    还有两种方法:

  • 创建并插入一个
    映射
    ,其中包含作为fxml值的框:

    public static <T> T load(URL url) throws IOException {
        FXMLLoader loader = new FXMLLoader(url);
        T result = loader.load();
        Object controller = loader.getController();
        if (controller instanceof NamespaceReceiver) {
            ((NamespaceReceiver) controller).setNamespace(loader.getNamespace());
        }
        return result;
    }
    
    
    
    控制器

    public class Controller {
    
        private Map<String, Label> boxes;
        @FXML
        private Spinner<Integer> number;
        @FXML
        private Label box1;
        @FXML
        private Label box2;
    
        @FXML
        private void modify(ActionEvent event) {
            boxes.get("box"+number.getValue()).setText("42");
        }
    
    }
    
    public class Controller implements NamespaceReceiver {
    
        private Map<String, Object> namespace;
        @FXML
        private Spinner<Integer> number;
        @FXML
        private Label box1;
        @FXML
        private Label box2;
    
        @FXML
        private void modify(ActionEvent event) {
            ((Label)namespace.get("box" + number.getValue())).setText("42");
        }
    
        @Override
        public void setNamespace(Map<String, Object> namespace) {
            this.namespace = namespace;
        }
    }
    
    控制器

    public class Controller {
    
        private Map<String, Label> boxes;
        @FXML
        private Spinner<Integer> number;
        @FXML
        private Label box1;
        @FXML
        private Label box2;
    
        @FXML
        private void modify(ActionEvent event) {
            boxes.get("box"+number.getValue()).setText("42");
        }
    
    }
    
    public class Controller implements NamespaceReceiver {
    
        private Map<String, Object> namespace;
        @FXML
        private Spinner<Integer> number;
        @FXML
        private Label box1;
        @FXML
        private Label box2;
    
        @FXML
        private void modify(ActionEvent event) {
            ((Label)namespace.get("box" + number.getValue())).setText("42");
        }
    
        @Override
        public void setNamespace(Map<String, Object> namespace) {
            this.namespace = namespace;
        }
    }
    
    公共类控制器实现NamespaceReceiver{
    私有映射名称空间;
    @FXML
    私有微调器数;
    @FXML
    自有品牌box1;
    @FXML
    自有品牌box2;
    @FXML
    私有无效修改(ActionEvent事件){
    ((Label)namespace.get(“box”+number.getValue()).setText(“42”);
    }
    @凌驾
    公共void setNamespace(映射命名空间){
    this.namespace=名称空间;
    }
    }
    
    公共接口名称空间接收器{
    公共void setNamespace(映射名称空间);
    }
    
    加载fxml的代码:

    public static <T> T load(URL url) throws IOException {
        FXMLLoader loader = new FXMLLoader(url);
        T result = loader.load();
        Object controller = loader.getController();
        if (controller instanceof NamespaceReceiver) {
            ((NamespaceReceiver) controller).setNamespace(loader.getNamespace());
        }
        return result;
    }
    
    publicstatict加载(URL)引发IOException{
    FXMLLoader=新的FXMLLoader(url);
    T result=loader.load();
    对象控制器=loader.getController();
    if(NamespaceReceiver的控制器实例){
    ((NamespaceReceiver)controller.setNamespace(loader.getNamespace());
    }
    返回结果;
    }
    

  • 注意:如果指定了
    fx:id
    ,但没有指定
    id
    ,则
    fx:id
    将用作
    id
    ,这使得fxml代码中的
    id=“Box01”
    是多余的。。。