2011-10-18 7 views
0

私が書いているアプリケーションでJPanelを再インスタンス化する必要があります(基本的に、ユーザーがグラフを作成できる入力ウィンドウです。ユーザーが空にできるようにしたいので、CardLayoutを使用してください)。ないオプション)、と私はこのようなものを使用して考えた: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はないだろうこれは、示されていないということですパネルを空白の状態に再インスタンス化しなければならない場合はそれが悪いですが、このメソッドをデコレータパターンを使用してパネルに追加することも考えていましたので、新しいreinstaのコンポーネントを表示する必要がありますパネルを通過する。

答えて

3

私はそうCardLayoutを使用すると、オプション

それは確かではない、ユーザーはそれを空にすることができるようにしたいと思います。 CardLayout.removeLayoutComponent(Component)を参照してください。

+0

新しいJPanelを作成してレイアウトに追加し、古いJPanelを削除する必要があると言っていますか?それは私がEclipseのWindowBuilderを使って作ったので、パネルをそのJFrameに置くのに役立つかもしれません(ああ、私はコードの何が間違っているのか分かりました:私は()を検証するのを忘れました) – Orgrim

+1

私はそれについて深く考えなかったあなたのコードをよく見ていました)。私はあなたの投稿が誤解に基づいていることを単に指摘していました。 –

関連する問題