获取jpanels数组列表中某个容器的索引号

问题描述 投票:0回答:2

我想知道是否有一个类似于indexOf()的ArrayLists方法可以告诉我特定容器的元素编号是多少。

说我有一个保存字符串的ArrayList:

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

如果我正在寻找包含“ example”的字符串的元素号,我会打电话给:

stringHolder.indexOf("example");

找到我的答案。

您如何通过JPanels执行此操作?特别是如果所有容器实际上都相同。我需要能够通过在特定容器中按按钮来从其父面板中删除该容器。动作侦听器将从面板中删除容器。但是,我需要知道该特定容器的元素编号。 TIA。

java swing arraylist jpanel
2个回答
4
投票

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

[请注意,您可以使用静态Arrays.binarySearch(Object[] a, Object key)方法来实现此目的,但也请注意,为了使其正常工作,您的JPanel应该重写equals和hashCode,以便此方法可以正常工作,以便键将与兴趣,而不必已经掌握了兴趣部分。

注意,以这种方式获得对组件的引用是相当“笨拙的”,这意味着可能导致易碎的程序比您想要的更容易形成错误。最好有其他更干净的方法来获取参考,例如将关键组件放在ArrayList或Map中。


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


0
投票

除了the existing answer,使用类似的方法,如果您知道所需组件的位置,可以找到容器中容纳的组件的“索引”,可以使用:

© www.soinside.com 2019 - 2024. All rights reserved.