2011-10-18 85 views
0

我需要在我正在編寫的應用程序中重新實例化一個JPanel(基本上它是用戶可以創建圖形的輸入窗口,我希望用戶能夠清空它,因此使用CardLayout不是一個選項),我想用這樣的事情的:Reinstantiating jpanels

import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.Toolkit; 
import java.awt.event.MouseEvent; 
import java.awt.event.MouseListener; 
import java.awt.event.MouseMotionListener; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 

public class AppletProve extends JPanel implements MouseListener, MouseMotionListener{ 

private JPanel p1; 
public AppletProve(){ 
    super(); 
    setLayout(null); 
    Dimension dim=Toolkit.getDefaultToolkit().getScreenSize(); 
    dim.width=(int) (dim.width*0.66); 
    dim.height=(int) (dim.height*0.75); 
    setPreferredSize(dim); 
    addMouseListener(this); 
} 
public void crea(){ 
    p1=new JPanel(); 
    p1.setBounds(10,10,60,70); 
    p1.setBackground(Color.YELLOW); 
    JLabel lbl1=new JLabel("prova1"); 
    p1.add(lbl1); 
    add(p1); 
} 
public void collega(){ 
    remove(p1); 
    p1=new JPanel(); 
    p1.setBounds(10,10,60,70); 
    p1.setBackground(Color.BLUE); 
    JLabel lbl2=new JLabel("prova2"); 
    p1.add(lbl2); 
    add(p1); 
} 
@Override 
public void mouseClicked(MouseEvent arg0) { 
    System.out.println("chiamato"); 
    collega(); 

} 
@Override 
public void mouseEntered(MouseEvent arg0) { 
    // TODO Auto-generated method stub 

} 
@Override 
public void mouseExited(MouseEvent arg0) { 
    // TODO Auto-generated method stub 

} 
@Override 
public void mousePressed(MouseEvent arg0) { 
    // TODO Auto-generated method stub 

} 
@Override 
public void mouseReleased(MouseEvent arg0) { 
    // TODO Auto-generated method stub 

} 
@Override 
public void mouseDragged(MouseEvent arg0) { 
    repaint(); 

} 
@Override 
public void mouseMoved(MouseEvent arg0) { 
    // TODO Auto-generated method stub 

} 
} 

的是,同時面板P1被重新實例,因爲背景顏色的變化,沒有顯示LBL2的問題,這將不會是如果我只需要將面板重新實例化爲空白狀態,那就不好了,但我正在考慮使用此方法通過裝飾器模式向面板添加責任,因此我需要顯示新增加的組件斜面板。

回答

3

我希望用戶能夠將其清空,所以使用CardLayout是不是一種選擇,當然

它。請參閱CardLayout.removeLayoutComponent(Component)

+0

所以你說我應該創建一個新的JPanel,將它添加到佈局,然後刪除舊的?這可能會幫助我把面板放在它的JFrame中,因爲我使用Eclipse的WindowBuilder來編寫它(哦,順便說一句,我只是覺得代碼有什麼問題:我忘了驗證()) – Orgrim

+1

我沒有深思熟慮仔細查看你的代碼)。我只是在指出你的帖子是基於誤解。 –