我有一些關於從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將刪除它。 –
不,你已經要求它將它從列表中刪除 - 所以這就是它將從中刪除。如果你不能從一個集合中刪除一個元素而不影響其他事物,那將是非常奇怪的。 –