当前位置: 首页 > 面试题库 >

遍历容器和组件以查找给定类的对象?

师曦
2023-03-14
问题内容

我为JLabels和AbstractButtons编写了MnemonicsBuilder类。我想编写一个方便的方法setMnemonics( JFrame f ),该方法将遍历JFrame的每个子级并选择JLabels和AbstractButtons。如何获得对JFrame中包含的所有内容的访问权限?我试过了:

LinkedList<JLabel> harvestJLabels( Container c, LinkedList<JLabel> l ) {
    Component[] components = c.getComponents();
    for( Component com : components )
    {
        if( com instanceof JLabel )
        {
            l.add( (JLabel) com );
        } else if( com instanceof Container )
        {
            l.addAll( harvestJLabels( (Container) com, l ) );
        }
    }
    return l;
}

在某些情况下,这很好。在其他情况下,它会耗尽内存。我在想什么呢?有没有更好的方法来搜索子组件?我的递归有缺陷吗?这不是Swing中事物如何“包含”其他事物的图片吗?例如,Swing不是一棵有根的树吗?

JFrame
|
|\__JMenuBar
|   |
|    \__JMenu
|       |
|        \__JMenuItem
|
|\__JPanel
|   |
|   |\__JButton 
|   |
|   |\__JLabel
|   |
|   |\__ ... JCheckBoxes, other AbstractButtons, etc.

问题答案:

在这里与Tom保持一致…您的问题是,您已经传递了ListJLabels 添加到递归方法中,并且还返回了它-
因此将相同的项多次添加到您的列表中。用更政治上正确的术语来说-这List是您的累加器。

您的方法应如下所示:

public void harvestJLabels(Container c, List<JLabel> l) {
    Component[] components = c.getComponents();
    for(Component com : components) {
        if(com instanceof JLabel) {
            l.add((JLabel) com);
        } else if(com instanceof Container) {
            harvestJLabels((Container) com, l));
        }
    }
}

然后,您可以使用一个辅助方法来启动此收获:

public List<JLabel> harvestJLabels(Container c) {
    List<JLabel> jLabels = new ArrayList<JLabel>();
    harvestJLabels(c, jLabels);
    return jLabels;
}


 类似资料:
  • 如何遍历不同类对象的ArrayList以搜索特定类? productionDate是在基类中实现的接口。 这是代码,但它不打印任何东西:)

  • 问题内容: 我从查询中得到以下结果,并在plsql块中浏览记录并向客户发送send_email。 匿名块 我想知道最好的方法是重复查询结果,而不是发送多封电子邮件,而是发送一封包含相关详细信息的电子邮件。例如,在上述情况下SMITH重复两次,所以用上面的方法将史密斯拿到两封电子邮件,而不是我想发一封电子邮件与和 我怎样才能做到这一点? 问题答案: 为此,请不要在PL / SQL的循环内进行循环-使

  • 问题内容: 有一段时间的魔鬼试图解决这个问题。我在这里问了类似的问题:Swift:获取特定类型的所有子视图并添加到数组中 在执行此操作的同时,我意识到有很多子视图和子子视图,因此我需要一个从主UIView开始的功能,循环遍历所有子视图(及其子视图,直到没有剩余的子视图)并将其添加到一个自定义按钮类的数组,我将其命名为CheckCircle。 本质上,我想结束于CheckCircles数组,这些数组

  • 问题内容: 我有很多任意大小的数组。这是一个正方形阵列。我正在尝试掌握如何像a 而不是a 那样对角地遍历(我已经知道该怎么做)。到目前为止,我有以下代码: 我有三个循环,因为这是我做另一个对角线的方式: 在尝试中,我不断超越边界并获取ElementOutOfBounds异常。假设阵列如下(3x3而不是500x500): 我想将以下内容打印为字符串: 先前的SO问题对于整数数组也有类似的问题,解决方

  • 问题内容: 对于Java开发人员来说,这必须是一个非常基本的问题,但是在给定 类名* 的情况下找到合适的 jar文件 的最佳方法是什么? * 例如,给定“ com.ibm.websphere.security.auth.WSSubject ”,您如何跟踪适当的jar文件?(“ google”不是我要找的答案!) 在Java文档不给jar文件的任何暗示,明显的jar文件的名称本身不提供线索。 在Ja

  • 本文向大家介绍如何遍历jQuery中的数组和对象?,包括了如何遍历jQuery中的数组和对象?的使用技巧和注意事项,需要的朋友参考一下 要遍历jQuery中的数组和对象,请使用jQuery循环。您可以尝试运行以下代码以了解如何遍历数组和对象- 示例