🟩 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() : 동시에 지정 가능 메소드
'Java > [학교] Java_GUI' 카테고리의 다른 글
자바_프로젝트_스윙_(리듬게임) (0) | 2021.12.12 |
---|---|
ch12. 스윙 컴포넌트들 (0) | 2021.10.05 |
ch11. 그래픽 프로그래밍 (0) | 2021.09.28 |
ch10. 사용자 이벤트 처리 (0) | 2021.09.14 |
ch09. 인터페이스, 람다식, 패키지 (0) | 2021.09.07 |