我想知道 ArrayList 是否有一种类似于 indexOf() 的方法,可以告诉我特定容器的元素编号是多少。
假设我有一个包含字符串的 ArrayList:
ArrayList<String> stringHolder = new ArrayList<>();
如果我正在查找包含“example”的字符串的元素编号,我只需调用:
stringHolder.indexOf("example");
找到我的答案。
如何使用 JPanel 做到这一点?特别是如果所有容器实际上都是相同的。我需要能够通过按容器内的按钮从其父面板中删除特定容器。操作监听器将从面板中删除容器。但是,我需要知道该特定容器的元素编号。 TIA。
最佳答案
要查找容器中保存的组件的“索引”,您需要通过调用 getComponents()
从容器中获取组件数组。 ,然后要找到您想要的组件,您需要遍历数组,测试是否获得了您想要的内容。
请注意,您可以使用静态 Arrays.binarySearch(Object[] a, Object key)
方法来实现此目的,但还要注意,为了使其正常工作,您的 JPanel 应该重写 equals 和 hashCode 以便此方法能够工作,以便 key 将与感兴趣的 JPanel 匹配,而不必已经拥有感兴趣的组件手。
请注意,以这种方式获取对组件的引用相当“笨拙”,这意味着它有可能导致脆弱的程序,比您想要的更容易形成错误。最好采用其他更简洁的方式来获取引用,例如将关键组件放在 ArrayList 或 Map 中。
<小时/>编辑:对于您的程序,您已经拥有对单击的 JPanel 的引用。由于 JCheckBox 由该 JPanel 持有,因此您可以通过其监听器的 getSource()
获取对 JCheckBox 的引用。方法,然后通过调用 getParent()
获取对其“父”容器 JPanel 的引用在 JCheckBox 上。
关于java - 获取jpanels的arraylist中某个容器的索引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44252593/