2017-05-30 39 views
0

我想知道是否有ArrayLists的方法,类似于indexOf(),它可以告诉我什么是特定容器的元素编号。获取jpanels数组列表中某个容器的索引号

说我有这样的举行字符串的ArrayList:

ArrayList<String> stringHolder = new ArrayList<>(); 

如果我正在寻找的是,包含“示例”字符串的元素个数,我只想呼吁:

stringHolder.indexOf("example"); 

到找到我的答案。

你怎么能这样做JPanels?特别是如果所有容器都几乎相同。我需要能够通过按下该容器中的按钮来从其父面板移除特定容器。动作侦听器将从面板中移除容器。但是,我需要知道该特定容器的元素编号。 TIA。

+0

Java.util.ArrayList类方法indexOf(Object o)用于查找列表中某个特定元素的索引,它已经有IndexOf()方法 –

回答

3

要查找容器中保存的组件的“索引”,需要通过调用getComponents()来从容器中获取组件数组,然后找到您需要的组件,您需要遍历数组,测试以查看是否你已经得到你想要的东西。

需要注意的是,你可以使用静态Arrays.binarySearch(Object[] a, Object key)方法来实现这一点,但也注意到,这个工作很好,您的JPanel应该重写equals和hashCode所以,这种方法将工作,使重点将匹配的的JPanel兴趣,而不必拥有手头的兴趣成分。

请注意,以这种方式获取对组件的引用相当“糟糕”,这意味着它可能导致脆弱的程序,比您想要的更容易形成错误。最好有其他更清晰的方法来获取参考,例如将关键组件放置在ArrayList或Map中。


编辑:对于您的程序,您已经参考了单击的JPanel。由于JCheckBox由JPanel持有,因此可以通过其侦听器的getSource()方法获取对JCheckBox的引用,然后通过在JCheckBox上调用getParent()来获取对其“父”容器JPanel的引用。

+0

我想你误解了这个问题。每个ArrayList元素都包含整个容器,而不是单个组件。 –

+0

@JohnEakin:关键组件应该被分配给字段。分组容器应该可以在他们自己的班级中。 –

+1

@JohnEakin:请注意,您的JPanel参考已经很容易获得。请参阅编辑。 –