2011-10-18 1 views
0

필자가 작성한 응용 프로그램에서 JPanel을 다시 인스턴스화해야합니다 (기본적으로 사용자가 그래프를 작성할 수있는 입력 창이있어서 CardLayout을 사용하여 사용자가이를 비울 수 있기를 바랍니다. 하지 옵션), 나는 이런 식으로 뭔가를 사용하여 생각하고 있었는데 :jpanels 다시 인스턴스화

는 패널 (P1)가 다시 인스턴스화하는 동안 문제가, 배경 색상 변경하기 때문에, LBL2가 표시되지 않을 것을
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 

} 
} 

,하지 않을 것이다 빈 상태로만 패널을 다시 인스턴스화해야한다면 나쁘지 만 데코레이터 패턴을 통해 패널에 책임을 추가 할 때도이 방법을 사용하려고 생각했기 때문에 새 reinsta의 구성 요소를 표시해야합니다. 고 말했다.

답변

3

나는 그렇게 CardLayout는 그것이

물론 옵션이 아닙니다 사용하여, 사용자가이를 비울 수 있도록하고 싶습니다. CardLayout.removeLayoutComponent(Component)을 참조하십시오.

+0

그래서 새 JPanel을 만들어 레이아웃에 추가 한 다음 이전 JPanel을 제거해야한다고 말하고 있습니까? Eclipse의 WindowBuilder를 사용하여 패널을 작성하는 데 도움이 될 수 있습니다. (오 btw, 코드에 문제가 있음을 알았습니다. 유효성 검사를 잊어 버렸습니다()) – Orgrim

+1

나는 그것에 대해 깊이 생각하지 않았습니다. 당신의 코드를 자세히 보았습니다). 나는 당신의 게시물이 오해에 근거한 것이라고 지적하고있었습니다. –