ch08. 그래픽 사용자 인터페이스

728x90

🟩 ch08. 그래픽 사용자 인터페이스

08-1. GUI(그래픽 사용자 인터페이스)

[AWT와 스윙]

AWT : 자바 초기 제공 GUI. 컴포넌트가 플랫폼에 종족적이라 일관된 화면 제공 X

스윙(多): 업그레이드 버전 GUI. 컴포넌트가 자바로 작성되어서 일관된 화면 제공 O

: 스윙에 속하는 클래스들은 모두 앞에 J 붙임

[스윙 패키지]

java.awt : GUI 컴포넌트를 위한 부모 클래스 제공. Color, Point클래스 포함

java.awt.event : GUI 컴포넌트로부터 발생되는 이벤트 처리할 클래스, 인터페이스 제공

java.awt.swing : GUI 컴포넌트 제공 (버튼, 텍스트 필드, 프레임, 패널 등)

08-2. 컨테이너

[자바 제공 컴포넌트]

  • 단순 컴포넌트
  • 컨테이너 컴포넌트 : 다른 컴포넌트들을 안에 포함시키는 컴포넌트
  • 예 )프레임, 패널, JDiolog, JApplet, JScrollPane 등

최상위 컨테이너 : 절대 다른 컨테이너 안에 포함 X 컨테이너

스윙 최상위 컨테이너 3가지 : JFrame, JDialog, JApplet 등

일반 컨테이너 : 다른 컨테이너 안에 포함 O 컨테이너

08-3. GUI 작성 절차

[스윙 최상위 컨테이너]

JFrame : 메뉴 가지는 일반 데스크탑 애플리케이션에 적합

JDialog : 메뉴 없는 대화형식의 간단 애플리케이션에 적합

JApplet : 애플릿 작성 사용

[GUI 작성 절차]

1) 하나의 최상위 컨테이너 생성 ex) 프레임

2) 중간 컨테이너 생성하여서 최상위 컨테이너에 추가 ex) 패널 생성하여 프레임에 추가

3) 필요한 컴포넌트들 생성하여서 중간 컨테이너에 추가 ex) 컴포넌트들 생성하여 패널에 추가

[프레임 생성하기]

방법 1 ) 직접 main()에서 JFrame 객체 생성하여 프레임 생성

방법 2 ) 외부에 JFrame 클래스 상속받은 자식 클래스 선언

          main()에서 외부의 프레임 객체 생성

방법 3) JFrame 상속받은 자식 클래스 선언하고

          해당 클래스 내부에 main() 메소드 선언하여 직접 프레임 객체 생성

[JFrame 클래스]

  • 컨테이너는 컴포넌트들을 트리형태로 저장하며, 최상위 컨테이너가 루튼노드됨
  • 각 컴포넌드는 단 한 번만 컨테이너에 포함 가능

  (다른 컨테이너에 포함된 컴포넌트를 다시 저장 X)

  • 최상위 컨테이너에는 메뉴바 추가가능 O
  • 최상위 컨테이너 내부에는 ‘콘텐트 페인’을 가지고 있음 (여기에 화면 컴포넌트 저장)

[JFrame 프레임 객체 내부 속성 변경] : set 메소드 사용

add(컴포넌트) : 프레임에 컴포넌트 추가

setLocation(x, y) : 프레임의 위치 설정

setSize(너비, 높이) : 프레임 크기 설정

setIconImage(아이콘) : 윈도우 시스템에 표시할 아이콘 세팅

setTitle() : 타이틀 바 제목 세팅

setResizable(불) : 사용자가 크기 조절 가능여부 설정

08-4. 기초 컴포넌트들

[기본 컴포넌트] Component

패널(JPanel) : 중간 컨테이너 컴포넌트

레이블: 텍스트 표시하는 공간

텍스트 필드 : 사용자가 텍스트 입력하는 공간

버튼 : 어떤 이벤트 실행할 버튼

[패널] Panel

  • 컴포넌트들을 포함하도록 설계된 중간 컨테이너

: 프레임에 패널 추가한 후에, 다시 패널에 컴포넌트들을 추가

: 패널 투명도 조절 : setOpaque() 메소드

: 패널도 컨테이너의 일종이므로 배치 관리자 호출하여 설정 O

[레이블] Label

사용자는 편집 불가능한 텍스트 표시하는 컴포넌트

텍스트, 이미지 동시 표시 O

텍스트 폰트 변경 가능

[Label 생성 방법]

1) 생성자에 바로 “표시 텍스트” 넘김

JLabel label = new JLabel(“안녕하세요”);

2) 나중에 레잉블 텍스트 설정함

JLabel label = new JLabel();

label.setText(“안녕하세요”);

[텍스트 필드] TextField

  • 텍스트 필드 : 사용자가 한 줄의 텍스트 입력 가능
  • 텍스트 영역 : 사용자가 여러 줄의 텍스트 입력 가능

<스윙 제공 텍스트 입력 컴포넌트들>

JTextField-기본 텍스트 필드

JFormattedTextField- 사용자 입력 문자 제한

JPasswordField-사용자 입력 내용 안보임

JComboBox-사용자가 항목 중 선택

JSpinner-선택

setEditable(불) 메소드 : 표시전용 텍스트 편집 불가능 설정 메소드

setText() 메소드 : 텍스트를 쓰는 메소드

getText() 메소드 : 텍스트 필드에 있는 텍스트 가져오는 메소드

 

[버튼] Button

: 사용자가 버튼 클릭 시, 이벤트 발생시켜 동작 수행하는데 이용

<스윙 버튼 컴포넌트 제공>

JButton : 가장 일반 버튼

JCheckBox : 체크박스 버튼

JRadioButton : 라디오 버튼

JMenuItem: 메뉴

JCheckBoxMenuItem: 체크박스 갖는 메뉴 항목

JRadioButtonMenuItem:라디오 버튼 갖는 메뉴 항목

JToggleButton: 2가지 상태 토글 가능 버튼

08-5. 배치 관리자

  • 절대 위치 사용하여 컴포넌트 배치 시, 외관이 플랫폼마다 달라짐

[배치 관리자]

-컨테이너 안에 존재한느 컴포넌트들의 크기, 위치 자동 관리하는 객체

✅FlowLayout

: 컴포넌트들을 왼->오 한 줄로 나열하여 배치

: 디폴트 배치 관리자

: 배치 방향 변경 시→ setComponentOrientation() 사용

✅BorderLayout

: 컴포넌트들이 5개의 영역 중 하나에 배치되어 가능한 모든 영역 차지

: 영역 지정 시 (문자열 지정 or 정적 필드 상수 지정)

: 영역 지정 X → 컴포넌트 중앙에 배치됨

add(컴포넌트, BorderLayout.영역지정);

✅GridLayout

: 컴포넌트들을 격자 모양으로 배치

: 모든 컴포넌트들이 같은 크기를 가짐

[배치 관리자 설정]

: 배치 관리자 객체 생성 후, setLayout() 메소드로 배치 관리자 지정

panel.setLayout( new BorderLayout() );

      <컴포넌트 크기 힌트> setMinimumSize(), setPreferredSize(), setMaximumSize() 메소드

       <컴포넌트 정렬 힌트> setAlignmentX(), setAlignmentY() 메소드

[절대 위치로 설정] : 배치 관리자 사용X

: 배치관리자 null로 설정 후 추가한 컴포넌트의 위치,크기 설정을 직접 메소드 호출 배치

1) setlayout(null);

2) Button b = Button(“ ”);

 add(b); //컴포넌트를 추가

3) 직접 메소드 호출하여 컴포넌트의 위치, 크기를 지정

  • setSize(w,h) , setLocation(x,y)
  • setBounds() : 동시에 지정 가능 메소드

728x90