프로그래밍[Univ]/Swing Basic

[Swing] GUI 프로그램 만들기...

Cloud Travel 2011. 8. 18. 23:15
* 스윙 프레임(JFrame)

 - 모든 스윙 컴포넌트를 답는 최상위 컨테이너
 - 프래임이 있어야 GUI가 화면상 출력이 된다
 ⓐ 프레임이 없이 독립적으로 화면에 출력되지 않는다.
 ⓑ 프레임이 닫히면 프레임 내의 모든 컴포넌트들도 사라진다.
 - JFrame은 Frame/MenuBar/ContentPane으로 구성
 ⓐ MenuBar : 메뉴를 부착할 수 있게 하는 Bar
 ⓑ ContentPane : 메뉴를 제외한 모든 GUI를 부착하는 공간
 - 프레임 메소드
 ⓐ setTitle("String") > 프레임의 title을 String으로 지정
 ⓑ setSize(num1,num2) > 프레임의 크기를 num1 x num2로 지정
 ⓒ setVisble(value) > value로 true와 false를 가질수 있으며 true일시 화면상에 보인다. default값은 false!! 
   ※ size의 num1 또는 num2가 "0"이면 생성되지 않는다.
 - 프레임 생성의 두가지 예
 ⓐ JFrame 객체를 직접 생성
import javax.swing.*;
public class MakeFrame{
 public static void main(String[] args){
  JFrame f = new JFrame();
  f.setSize(300,150);
  f.setTitle("First Frame");
  f.setVisible(true);
 }
}
    장점 : 단순하다
    단점 : 컴포넌트 추가 작업이 불편하다. 확정성이 떨어진다.

 ⓑ JFrame 클래스에서 상속받는 방법
import javax.swing.*;
public class MakeFrame extends JFrame{
 MakeFrame(){
  setSize(300,150);
  setTitle("First Frame");
  setVisible(true);
 }
 public static void main(String[] args){
  MakeFrame mf = new MakeFrame();
 }
}
  장점 : MakeFrame 클래스에 메소드를 추가할 수 있기 때문에 확장성, 융통성이 높다.


 - 프레임에 컴포넌트 부착하기
  > 컴포넌트는 컨텐트 팬에만 부착할 수 있다.
 ⓐ 컨텐트 팬은 프래임 생성과 동시에 생성 > 프레임에 해당하는 컨텐트 펜을 알아내야 한다.
  >container NAME = Frame_Name.getContentPane()
 ⓑ 알아낸 컨텐트 펜에 컴포넌트 부착하기 > 컨테이너의 add()메소드 사용
 > NAME.add(COMPONENT);

* 스윙프로그램의 종료

 - System.exit(0); 를 적정위치에 넣기
 - 프레임 윈도우의 x버튼의 클릭과 함께 종료시키기
  > 프래임 윈도우의 x버튼을 클릭하면 윈도우 창만 사라지고 프로그램은 계속 실행된다.
  > 다음과 같은 소스를 추가하여 윈도우의 x버튼 클릭과 함께 프로그램을 종료시키게 만든다.
  > Frame_Name.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

---------------------------------------------------------------------------------------------
위에서 나온 것을 바탕으로 간단히 스윙GUI를 구현해 보겠다~

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

public class exam1 extends JFrame{
 exam1(){
  setTitle("First Swing Program");
  //프래임의 타이틀 설정
  setSize(300,300);
  //프래임 사이즈를 300*300으로 설정
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  //윈도우 프레임의 x버튼을 클릭시 프로그램 종료가 가능하게 만듬
  Container cp = getContentPane();
  //프레임의 컨텐트 펜을 발굴!!
  cp.add(new JButton("TEST"));
  //TEST란 이름을 가진 버튼 컴포넌트 추가
  cp.setBackground(Color.YELLOW);
  //컨텐트 펜의 색을 노란색으로 초기화
  cp.setLayout(new FlowLayout());
  //배치 관리자 실행(추후설명)
  setVisible(true);
  //프레임을 보이게 설정
 }
 public static void main(String[] args){
  exam1 A = new exam1();
 }
}

 결과