我有一些关于从arrayList中删除对象的问题,如下所示,我创建了一个JComponent,将它添加到arrayList中,然后将它添加到JPanel中,之后我将它从Arraylist中移除,但它仍然坚持JPanel? 为什么对象仍然添加到Jpanel?由“添加”方法引用? 我应该jp.remove(obj),完全删除?如果不是,我该如何彻底删除它? < - 主要问题。删除GC ArrayList Java
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.util.ArrayList;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Frame extends JFrame{
public Frame(){
Jpanel jp = new Jpanel();
getContentPane().add(jp);
setPreferredSize(new Dimension(200,200));
setVisible(true);
pack();
}
public class Jpanel extends JPanel{
public Jpanel(){
ArrayList<Obj> ArrList = new ArrayList<Obj>();
setLayout(null);
Obj obj = new Obj();
ArrList.add(obj);
add(obj);
ArrList.remove(0);
System.out.println(ArrList);
revalidate();
repaint();
}
}
public class Obj extends JComponent{
public Obj(){
setBounds(0,0, 100 , 100);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.green);
g.fillRect(50, 50, 50, 50);
}
}
public static void main(String[] args) {
Frame f = new Frame();
}
}
你为什么要*期望*从列表中删除它从面板中删除它? –
@Jon Skeet认为它会删除对它的引用,然后GC将删除它。 –
不,你已经要求它将它从列表中删除 - 所以这就是它将从中删除。如果你不能从一个集合中删除一个元素而不影响其他事物,那将是非常奇怪的。 –