当前位置:  开发笔记 > 编程语言 > 正文

添加FXML中定义的元素以循环列出

如何解决《添加FXML中定义的元素以循环列出》经验,为你挑选了1个好方法。

我有很多具有名称a1,a2,a3,...的对象我需要将它们放入List中,因此使用它们更简单,我会以某种方式使用循环吗?

我的尝试是:

List list = new LinkedList();
for (int i=0; i<1000; i++){
    String varName = "a"+i;
    list.add((SomeObject) varName);
}

在这种情况下有人有建议吗?在循环内创建变量不是解决方案,因为它们是.fxml文档的一部分.或者给我一个如何用循环创建它的建议,因为它在.fxml中创建行并行添加循环新对象.

为了更容易理解.fxml文件看起来像

  
  
  
  

非常感谢您的建议!



1> James_D..:

如果你有那么多项,最好用Java初始化它们,而不是使用FXML.例如,而不是:


    

和一个控制器

public class Controller {

    @FXML
    private FlowPane container ;
    @FXML
    private Label label1 ;
    @FXML
    private Label label2 ;
    // ...

    @FXML
    private Label label1000 ;

    // ...
}

我会做



public class Controller {

    @FXML
    private FlowPane container ;

    private List

作为此想法的变体,请考虑定义自定义组件:

public class LabelFlow extends FlowPane {

    private List

现在用你的FXML做


并在你的控制器

public class Controller {
    @FXML
    private LabelFlow labelFlow ;

    public void initialize() {
        for (Label label : labelFlow.getLabels()) {
            // do whatever you need with label....
        }
    }
}

如果要在Scene Builder中使用类似自定义类,则需要跳过几个环节.请参阅向SceneBuilder 2.0添加自定义组件

如果你真的想在FXML中定义所有这些控件,这将是一个维护噩梦,你可以使用反射来访问变量.我不建议这样做,不仅因为它很难维护,而且因为它本质上的反射容易出错(没有编译时检查)而且很复杂.

但你可以做到

public class Controller {

    @FXML
    private FlowPane container ;
    @FXML
    private Label label1 ;
    @FXML
    private Label label2 ;
    // ...

    @FXML
    private Label label1000 ;

    private List

推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有