获取jpanels的arraylist中某个容器的索引号
Get index number of a certain container in arraylist of jpanels
我想知道 ArrayLists 是否有类似于 indexOf() 的方法,可以告诉我特定容器的元素编号是多少。
假设我有一个包含字符串的 ArrayList:
ArrayList<String> stringHolder = new ArrayList<>();
如果我要查找包含 "example" 的字符串的元素编号,我会调用:
stringHolder.indexOf("example");
找到我的答案。
如何使用 JPanel 执行此操作?特别是如果所有容器实际上都相同。我需要能够通过按下该容器内的按钮从其父面板中删除特定容器。动作侦听器将从面板中删除容器。但是,我需要知道那个特定容器的元素编号。 TIA.
要查找容器中组件的"index",您需要通过调用getComponents()
从容器中获取组件数组,然后要找到您想要的组件,您需要遍历阵列,测试看看你是否得到了你想要的。
请注意,您可以使用静态 Arrays.binarySearch(Object[] a, Object key)
方法来实现此目的,但也请注意,要使其正常工作,您的 JPanel 应重写 equals 和 hashCode 以便此方法起作用,以便关键将匹配感兴趣的 JPanel,而不必手头已经有感兴趣的组件。
请注意,以这种方式获取对组件的引用相当 "kludgy" 这意味着它有可能导致脆弱的程序,这些程序比您想要的更容易形成错误。最好有其他更简洁的方式来获取您的参考,例如将您的关键组件放在 ArrayList 或 Map 中。
编辑:对于您的程序,您已经拥有对单击的 JPanel 的引用。由于 JCheckBox 由该 JPanel 持有,您可以通过其侦听器的 getSource()
方法获取对 JCheckBox 的引用,然后通过调用 [=13= 获取对其 "parent" 容器 JPanel 的引用] 在 JCheckBox 上。
除了 ,使用类似的方法,如果您知道所需组件的位置,要查找容器中组件的 "index",您可以使用:
index = Arrays.asList(container.getComponents()).indexOf(container.getComponentAt(x, y));
我想知道 ArrayLists 是否有类似于 indexOf() 的方法,可以告诉我特定容器的元素编号是多少。
假设我有一个包含字符串的 ArrayList:
ArrayList<String> stringHolder = new ArrayList<>();
如果我要查找包含 "example" 的字符串的元素编号,我会调用:
stringHolder.indexOf("example");
找到我的答案。
如何使用 JPanel 执行此操作?特别是如果所有容器实际上都相同。我需要能够通过按下该容器内的按钮从其父面板中删除特定容器。动作侦听器将从面板中删除容器。但是,我需要知道那个特定容器的元素编号。 TIA.
要查找容器中组件的"index",您需要通过调用getComponents()
从容器中获取组件数组,然后要找到您想要的组件,您需要遍历阵列,测试看看你是否得到了你想要的。
请注意,您可以使用静态 Arrays.binarySearch(Object[] a, Object key)
方法来实现此目的,但也请注意,要使其正常工作,您的 JPanel 应重写 equals 和 hashCode 以便此方法起作用,以便关键将匹配感兴趣的 JPanel,而不必手头已经有感兴趣的组件。
请注意,以这种方式获取对组件的引用相当 "kludgy" 这意味着它有可能导致脆弱的程序,这些程序比您想要的更容易形成错误。最好有其他更简洁的方式来获取您的参考,例如将您的关键组件放在 ArrayList 或 Map 中。
编辑:对于您的程序,您已经拥有对单击的 JPanel 的引用。由于 JCheckBox 由该 JPanel 持有,您可以通过其侦听器的 getSource()
方法获取对 JCheckBox 的引用,然后通过调用 [=13= 获取对其 "parent" 容器 JPanel 的引用] 在 JCheckBox 上。
除了
index = Arrays.asList(container.getComponents()).indexOf(container.getComponentAt(x, y));