我想知道是否有一个ArrayLists的方法,类似于indexOf(),它可以告诉我特定容器的元素号是什么。
假设我有一个包含字符串的ArrayList:
ArrayList<String> stringHolder = new ArrayList<>();
如果我要查找包含&#34;示例&#34;的字符串的元素编号,我只需要调用:
stringHolder.indexOf("example");
找到我的答案。
你怎么能用JPanels这样做?特别是如果所有容器几乎相同的话。我需要能够通过按下该容器内的按钮从其父面板中删除特定容器。动作侦听器将从面板中删除容器。但是,我需要知道该特定容器的元素编号。 TIA。
答案 0 :(得分:3)
找到&#34;索引&#34;对于容器中保存的组件,您需要通过调用getComponents()
从容器中获取组件数组,然后找到所需的组件,您需要遍历数组,进行测试以查看是否已获得你想要什么。
请注意,您可以使用静态Arrays.binarySearch(Object[] a, Object key)
方法来实现此目的,但请注意,为了使其正常工作,您的JPanel应覆盖equals和hashCode,以便此方法可以正常工作,以便密钥匹配感兴趣的JPanel,而不必已经拥有感兴趣的组件。
请注意,以这种方式获取对组件的引用是公平的&#34; kludgy&#34;这意味着它可能导致脆弱的程序,这些程序可能比您想要的更容易形成错误。最好有其他更简洁的方法来获取引用,例如将关键组件放在ArrayList或Map中。
编辑:对于您的程序,您已经拥有对所单击的JPanel的引用。由于JCheckBox由JPanel持有,因此您可以通过其监听器的getSource()
方法获取对JCheckBox的引用,然后获取对其父级&#34;的引用。容器,JPanel,通过在JCheckBox上调用getParent()
。
答案 1 :(得分:0)
除了the existing answer以外,使用类似的方法,如果您知道所需组件的位置,则可以使用以下方法来查找容器中所容纳组件的“索引”:
index = Arrays.asList(container.getComponents()).indexOf(container.getComponentAt(x, y));