【问题标题】:Remove Item from Component[] in java从 java 中的 Component[] 中删除项目
【发布时间】:2015-03-05 00:00:04
【问题描述】:

我需要知道如何从 java 中的 Component[ ] 数组中删除一个或多个项目。我没有看到任何快速完成此操作的方法。我必须使用 java Arrays做到了吗?

例如: 我有一个带有 30 个相同按钮的 Jpanel,我这样做:

   Component[] comp = panel.getComponents();

我如何从 comp 中删除一个或所有项目?

如果我设置 comp=null; 还有更多它会清除所有项目吗?

我做什么:

我尝试按名称对 JPanel 的项目进行排序,我使用 Comparator 将所有项目添加到 comp,然后在对 comp 进行排序后,我将它们再次添加回面板(我排序的所有项目都是具有不同名称的相同按钮)是有最好的方法吗?

我使用的代码图片:

JButtons 也是应用程序的一部分(假设它们是具有右键单击功能和其他功能的轨道)

第 2 部分: 我的主要目标是重新分配 Array Components[] 使用的内存(有时它足够大,例如 150 mbs),并且在排序后我不再需要这些组件。我希望 Array Components[] 被分配java垃圾收集器的内存。

【问题讨论】:

  • Container#remove?如何维护自己的项目列表并自己删除它们?容器上可能还有其他组件...
  • 或者 Container#removeAll 如果容器上没有其他东西...否则你需要一次做一个...
  • 你的意思是我必须做一个链表?
  • 我同意@MadProgrammer。通过做你正在做的事情,你将你的程序逻辑与它的结构联系起来,并假设你永远不会再改变那个结构。您还增加了代码的复杂性并降低了它的可测试性。而是维护自己的收藏。
  • 考虑以不同的方式做事。例如,创建List<Action> 并对其进行排序可能会更容易,然后将操作添加到稳定不变的 JButton 网格中。或者更好的是,将您的项目放在 JTable 中并使用其排序功能为您排序项目。

标签: java swing


【解决方案1】:

忽略您有问题的设计,将 getComponents() 值放在一个列表中,您可以在其中动态删除元素,它会自动调整大小:

List<Component> compList = new ArrayList<Component>(Arrays.asList(panel.getComponents()));
// Let's assume compList has a size() value of 10
compList.remove(4);
compList.remove(7);

【讨论】:

  • 我有这个惊人的错误[类型列表不是通用的;它不能用参数参数化]。好吧,我把它改成了 ArrayList 然后 uoaou 我不能使用 Array.sort 方法
  • @crAlex:但是我想可以使用Collections.sort(compList),不是吗!!!!或者可以简单地使用JPanel.remove(givenComponent) 或一次删除所有组件,使用JPanel.removeAll()。完成后,请致电JPanel.revalidate(),然后在VIEW 上使更改可见。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多