当前位置: 首页 > 知识库问答 >
问题:

您能从一个类的字段中迭代地添加某些组件到JPanel吗?

刘修能
2023-03-14

我想使用循环将一种类型的所有组件添加到JGroup。这是我的第一个想法:

public class UI extends JFrame{
    private JLabel aLbl;
    private JLabel bLbl;
    private Component someOtherComponentA;
    private Component someOtherComponentB;
    private JPanel panel;

    public UI(){
       panel = new JPanel();
       panel.setLayout(new FlowLayout());
       //this is what I am trying to do
       for(JLabel l : Just_the_JLabels)
           panel.add(l);
    }     
}

我想我可以使用反射来获得JLabel类型的所有字段,但是我不知道如何获得分配给该字段的对象的实例。我有一个很长的组件列表,并认为如果我不复制paste panel.add(aLbl)、panel.add(bLbl)、panel.add(cLbl)等,它在代码中会看起来更好,也不会那么乏味。

相反,我要做这样的事情:

for(Field f : this.getClass().getDeclaredFields()){
    if(f.getType() == JLabel.class)
        //what goes in place of "object associated with field f"
        panel.add(object associated with the field f)
}

---编辑---

解决方案:公共类UI扩展了JFrame{private ArrayList=new ArrayList();

    public UI(){
        init();
    }

    public void setLbl(JLabel l){
        list.add(l)
    }

    private init(){
        setLabel(new JLabel("labelName"); //do this for each label

        for(JLabel label : list)
            panel.add(label);
    }
}

共有1个答案

段干帅
2023-03-14

只需创建吸气剂

我不知道你为什么使用< code >反射?

还有很多其他的方法。尽量避免< code >反射。

for (Field f : this.getClass().getDeclaredFields()) {
    if (f.getType() == JLabel.class) {
        // adjust the method name as per the getter/setter methods name
        Method method = this.getClass().getMethod("get" + f.getName());
        System.out.println(method.getName());
        Object object = method.invoke(this);
        if (object != null) {
            System.out.println(object.getClass().getName());
        }
    }
}

--编辑--

尝试不使用< code >反射的方式

private List<JLabel> list = new ArrayList<JLabel>();

// set the label using setter method 
// same for others also
public void setaLbl(JLabel aLbl) {
    if (aLbl != null) {
        // add in the list 
        list.add(aLbl);
    }
    this.aLbl = aLbl;
}

// now simply iterate the list

for(JLabel l : list){
    panel.add(l);
}
 类似资料:
  • 我有一个来自AJAX调用的JSON数组,如下所示: 我想在数据表上使用此数据,但我想根据字段标题(组)向表中的每一行添加文本输入。因此,我想将此列添加到每个数组,类似于: 这样DataTables将在每个新行上添加文本输入。如何使用jQuery或javascript实现这一点? 我尝试通过数组进行迭代: 但这显示错误,

  • 问题内容: 我对Java Swing还是很陌生,并且遇到了一些问题。 附带的问题是,在制作相当大的Java Swing应用程序时,拆分代码的最佳方法是什么?在我的情况下,我希望有一个布局与Microsoft Word一样的应用程序,其中的JToolBar充满按钮,而主JPanel则根据工具栏中的按钮进行更改。 因此,如下面的代码所示,我有一个JFrame并调用MainPanel类以创建面板并添加带

  • 我对Java Swing还很陌生,遇到了一些问题。

  • 我有两本字典Dict1和DICT2。Dict1中每个键的值如下所示: 但是Dict2由键组成,这些键是DICT1中的值。DICT2中的值是由元组组成的列表,如下所示。 我得到的当前输出是 我想要的输出应该是字典式的:

  • 运行查询后,我从MongoDB返回一个JSON值。问题是我不想返回与我的返回相关的所有JSON,我尝试搜索文档,但没有找到正确的方法。我想知道如果可能的话会怎样,如果可能的话,正确的做法是什么。示例:在数据库中 如果某个字段为用户存在,但不返回另一个字段,那么返回该字段的正确方式是什么。对于上面的示例,我想返回RMS的字段和扎克伯格的字段。这就是我试图找到的字段是否为空,但它似乎不起作用。

  • 问题内容: 如果我有我的Jpanel和我的JFreeChart。如何将此图表添加到JPanel中? 现在,如何在JPanle中添加图表? 问题答案: 从旧的Java论坛线程