2011-10-18 126 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

我没有深思熟虑仔细查看你的代码)。我只是在指出你的帖子是基于误解。 –