SSISO Community

시소당

revalidate() - 2


import  javax.swing.*;
import  java.awt.*;
import  java.awt.event.*;

class  TestPanel  extends  JPanel  implements  ActionListener{  
  JFrame  owner;
  JButton  jb1  =  new  JButton("A");
  JButton  jb2  =  new  JButton("B");

  public  TestPanel(JFrame  owner){
    this.owner  =  owner;    
    add(jb1);
    jb1.addActionListener(this);
    jb2.addActionListener(this);
  }

  public  void  actionPerformed(ActionEvent  ae){

    if(ae.getActionCommand().equals("A")){
      remove(jb1);  
      add(jb2);
    }
    else{
      remove(jb2);
      add(jb1);
    }
    //owner.pack();
  }
  protected  void  paintComponent(Graphics  g){
    super.paintComponent(g);

    repaint();
    revalidate();
  }
}
public  class  Test  extends  JFrame{  
  public  static  void  main(String  args[]){  
    JFrame  tf  =  new  Test();
    tf.add(new  TestPanel(tf));
    tf.setSize(100,100);
    tf.setVisible(true);  
    tf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }
}  

프레임이  생성된  이후에  컴포넌트가  추가되거나  삭제되는것이  바로  표시  안되는것을
추가  된  직후  owner.pack();  를    사용해도  해결이  되고
paintComponent()를  오버라이딩해서  repaint();      revalidate();  을  사용해도  해결이  됐는데
둘이  차이가  무엇이면  무슨  장단점이  있는지  궁굼하네요..  효율쪽에서나...  코드디자인면  에서나..
pack()이  나을꺼같기도  하고...  paintComponent가  나을꺼같기도  하고..
여러분들  생각은  어떠세요?

--------------------------------------------------------------

pack()  을  할  때  자동으로  repaint  를  내부에서  불러주기  때문입니다

출처  :  http://cafe.naver.com/javacircle.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=18438

[2008년  03월  07일  10:14:56  수정되었습니다.]

723 view

4.0 stars