반응형
 

GUI - AWT : 이벤트처리

     - SWING : 컴포넌트

◈ AWT ◈

 ▷ 하나의 코드를 가지고 여러 OS에서 동일한 형태로 실행이 되어야 하기 때문에 특정 OS에서만 제공한하는 GUT컴포넌트는 AWT에서 포함시킬수없다.

 ▷ OS에 종속됨

◈ Swing(스윙) ◈

 ▷ 스윙은 AWT의 단점을 보안. 개발된 자바 라이브러리.

 ▷ 스윙의 장점은 코드전체가 자바로 되어있어서 OS에 종속되는 부분이 없다.

    OS에 종속되는 부분이 없어 기존의 컴포넌트를 확장가능.

 ▷ 스윙으로 작성한 코드는 OS에 상관없이 어디서나 동일한 결과가 나온다.

    AWT에 있는기능은 스윙에 있지만 스윙에 있는 기능은 AWT에 없다.


◆ Component ◆

  └ 스윙의 컴포넌트는 대부분 javax.swing.JComponent클래스를 상속방아 사용.

  └  JComponent클래스는 AWT의 java.awt.Container를 확장한 클래스  

       Component      <====     Container    <====     JComponent

       (java.awt)                   (java.awt)                (javax.sing)


◆ JComponent ◆

  └ 툴팁(ToolTip)

     - 모든 컴포넌트에서는 풍선 도움말을 작성 할 수 있다.

        풍선도움말을 컴포넌트 위에 마우스를 올려 놓았을 때 도움말이 나타나게 된다.

     - 툴팁 텍스트를 설정하려면 selToolTipText메소드를 이용.

         public void setToolTipText(String tooltipMessage)

  └ 더블버퍼링 =>깜빡거리는 형상을 줄임.

     - 스윙에서 자체적으로 지원.

  └ 테두리(Border) : 컴포넌트의 테두리를 임의의 형태로 작성.

      - 컴포넌트에 테두리를 변경하고 싶다면

         public void setBorder(Border border)


◆ Container ◆ 

  └ 컨테이너는 다른 컴포넌트를 담기 위해 특화된 컴포넌트로 각 컨테이너마다 컴포넌트를 담는 방식.

  └ 컨테이너는 AWT의 컨테이너를 상속받아 구현된 최상의 컨테이너와 JComponent를 상속받아서 구현된 일반컨테이너와 구분

  └ 최상의 컨네이너 구조(JWindow, JDialog, JApplet, JFrame)이 있는데 각각의 AWT의 Window,Dialog,Frame을 상속받아서 구현한 컨테이너이다.

  └ 최상위 컨테이너는 Swing's GUI Application Program을 할 때 최소한 한개 이상을 가지고 있다.

  └ 최상위 컨테이너는 컴포넌트를 직접적으로 추가하지 않고, 포넌트의 추가/삭제를 JRootPane클래스에 위임하는 구조를 갖는다.
   - layerdPane에는 ContentPane하고 GlassPane이 있고, LayerPane은 RootPane에 붙고 RootPane은 Frame에 붙는다.

   - 컴포넌트를 붙일때는 ContentPane에 붙인다.

 ===================================================================                            

    **최상에는 JFrame이 있다.

==================================================================

awt는 바로 frameㅇ을 content를 붙이지만 swing에서는 JFrame에 JComponent를 추가 할 수 없다.

왜냐하면 컴포넌트의 추가/삭제는 JRootPane에 위임하기 때문이다.

따라서 대부분의 컴포넌트는 ContentPane에 추가/삭제하도록 되어있다.


 ⊙ setSize(400,500);

   └ JFrame에 width와 height를 지정한다. -setSize는 프레임의 크기
 ⊙ pack();
   └ pack() 컴포넌트 크기만큼 JFrame의 사이즈를 구성한다.
 ⊙ setLocation(500,500);

    └ JFrame에 시작 위치(width,height)를 지정.
 ⊙ setBounds(500,500,400,500);

    └ 크기와 위치를 동시에 지정 -setBounds(setSize,setLocation);
 ⊙ setVisible(true);

    └ JFrame을 보여주는지를 지정. true=>보여준다 / false=>보여주지 않는다.
 ⊙ setDefaultCloseOperation =>JFrame 종료 할때 어떤 동작할 것인가를 지정
       <옵션>
           └ DO_NOTHING_ON_CLOSE : 종료를 눌렀을때 아무 동작도 하지 말아라.
           └ HIDE_ON_CLOSE (default) :프로그램 종료 하지 않은 상태에서 숨어있어라.
           └ DIPOSE_ON_CLOSE : 현재프레임만 종료하라.
           └ EXIT_ON_CLOSE  : 모든 프레임을 종료하라.
 ⊙ setResizable(true);
    └ 프레임의 크기를 고정할 것인가 를 지정. true=>사이즈를 변경 가능. false=> 사이즈 변경 불가능.
 ⊙ JFrame.setDefaultLookAndFeelDecorated(true);
    └ JFrame을 JAVA LookAndFeel로 바꿔주는 메소드. 만약 false일경우 자바로 변경이 안됨.
   주의) JFrame 객체가 생성되기 이전에 호출되어야 한다.


   ex> public static void main(String[] args){
          JFrame.setDefaultLookAndFeelDecorated(true);
           new JFrameDemo("프레임 테스트");
         }

======================jframe을 상속받은 경우============================

package swing;
import java.awt.*;
import javax.swing.*;
public class JFrameDemo extends JFrame{
 public JFrameDemo(String title){
  super(title);
  JButton jbtn=new JButton("테스트");
  Container contentPane=getContentPane();
  contentPane.add(jbtn);
  setSize(400,500);
  setLocation(500,500);
  setVisible(true);
  setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
  setResizable(true);
 }
 public static void main(String[] args){
  JFrame.setDefaultLookAndFeelDecorated(true);
  new JFrameDemo("프레임 테스트");
 }
}


===========================jframe을 상속 받지 않은 경우========================

package swing;
import java.awt.*;
import javax.swing.*;
public class JFrameEx {
 public JFrameEx(String title){
  //부모가 없어지면 new를 통해 부모를 생성하고
  // 부모가 사용했던 래퍼런스는 부모.래퍼런스로 접근해주면 된다.
  JFrame jframe=new JFrame(title);
  JButton jbtn=new JButton("테스트");
  Container contentPane=jframe.getContentPane();
  contentPane.add(jbtn);
  jframe.setLocation(500,500);
  jframe.setVisible(true);
  jframe.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
  jframe.setResizable(true);
 }
 public static void main(String[] args){
  JFrame.setDefaultLookAndFeelDecorated(true);
  new JFrameDemo("프레임 테스트");
 }
}

===================================================================

+ Recent posts