Java Seminar 5.

Slides:



Advertisements
Similar presentations
3. 메소드와 변수 SCJP 자격증 프로젝트 발표자 : 최선웅. 1. 메 소 드 개 념 2. 메 소 드 양 식 3. 메 소 드 변 수 4. 메 소 드 예 제 5. 참 고 문 헌 / 자 료 목 차.
Advertisements

6 장 객체 - 지향 설계 ③. 목차 GUI 레이아웃  전화기 키 패드 전화기 키 패드 전화기 키 패드 모양의 GUI 를 만드는 Telephone.java, TelephonePanel.java 를 완성해 보자.  주석을 참고하여 TelephonePanel.java.
프로그램이란 프로그램 생성 과정 프로젝트 생성 프로그램 실행 컴퓨터를 사용하는 이유는 무엇인가 ? – 주어진 문제를 쉽고, 빠르게 해결하기 위해서 사용한다. 컴퓨터를 사용한다는 것은 ? – 컴퓨터에 설치 혹은 저장된 프로그램을 사용하는 것이다. 문제를 해결하기 위한.
출석수업 과제 – 총 5문제, 10월 25일 제출 정보통계학과 장영재 교수.
목 차 C# 언어 특징 .NET 프레임워크 C# 콘솔 프로그램 C# 윈도우 프로그램 실습 프로그래밍세미나 2.
예비보고서1 : 8개의 푸시버튼 스위치가 있다. 이 스위치에 각각 0~7개까지의 번호를 부여하였다고 하자
12. GUI – 그래픽 이야기.
01_ 가상 함수를 사용한 다형성의 구현 02_ 오버라이딩
OpenCV 안드로이드 연동 환경설정 OpenCV-Android 를 다운 받습니다.
파워포인트 2007.
클래스 class, 객체 object 생성자 constructor 접근 access 제어 이벤트 event 처리.
풀 다운 메뉴 File > New “intent” 이름을 넣고 OK 를 클릭한다.
최윤정 Java 프로그래밍 클래스 상속 최윤정
Java로 배우는 디자인패턴 입문 Chapter 5. Singleton 단 하나의 인스턴스
08. 파일 처리 제목. 08. 파일 처리 제목 파일 처리 방식을 익힌다. SD카드의 파일 처리 방식을 배운다. 커스텀뷰의 작성법을 살펴본다.
J2ME Install 부산대학교 인공지능 연구실.
Chapter 13 GUI 프로그래밍 01 GUI 화면 구성 02 GUI 이벤트 처리 03 GUI 메뉴와 툴바 예제 모음 요약
19장 스윙과 이벤트 처리 Section 1 스윙 컴포넌트 Section 2 이미지 아이콘과 라벨
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용 8.3 인터페이스의 상속 8.4 인터페이스 참조
07. 메뉴와 대화상자 제목. 07. 메뉴와 대화상자 제목 메뉴를 작성하고 사용하는 방법을 배운다. 토스트의 다양한 출력 방법을 알아본다. 대화상자의 사용법을 익힌다.
Root Filesystem Porting
Communication and Information Systems Lab. 황재철
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
Root Filesystem Porting
자바 5.0 프로그래밍.
D / K / I / T / E / C / H / N / O / L / O / G / Y
Power Java 제14장 배치 관리자.
학습목표 학습목차 다른 홈페이지의 HTML 파일 코드를 보는 방법에 대해 알아봅니다.
CHAP 12. 리소스와 보안.
10강. JSP 본격적으로 살펴보기-II 스크립트릿, 선언, 표현식 지시자 주석 Lecturer Kim Myoung-Ho
7장 인터페이스와 추상 클래스.
JAVA Canvas Swing.
Method & library.
JA A V W. 03.
자바응용.
30강 JAVA 그래픽 JAVA GUI(Graphic User Interface)란? AWT 컴포넌트? Swing 컴포넌트?
Quiz #7 다음 수들을 합병 정렬과 퀵 정렬 알고리즘을 이용하여 오름 차순으로 정렬하였을 때, 데이터 이동 회수를 각각 구하라. 여러분은 정렬 과정을 단계별로 보이면서 이동 회수를 추적해야 한다. 단, 퀵 정렬시에 피봇으로 배열의 왼쪽 첫 번째 원소를 선택한다. 5.
2018년 11월 05일 박성진 Web & Internet [08] 레이아웃 P1 2018년 11월 05일 박성진
CHAP 5. 레이아웃.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
27강 JAVA Collections - II - Map계열 컬렉션 클래스 살펴보기 - Set계열 컬렉션 클래스 살펴보기
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
Power Java 제11장 상속.
5강. 배열 배열이란? 배열의 문법 변수와 같이 이해하는 배열의 메모리 구조의 이해 레퍼런스의 이해 다차원 배열
9강. 클래스 실전 학사 관리 프로그램 만들기 프로그래밍이란 결국 데이터를 효율적으로 관리하기 위한 공구
11.어댑터 뷰 제목. 11.어댑터 뷰 제목 리스트뷰와 그리드뷰 활용법을 배운다. 갤러리와 스피너의 사용법을 익힌다.
컴퓨터 프로그래밍 기초 [01] Visual Studio 설치 및 사용방법
빌드 성공.
CHAP 21. 전화, SMS, 주소록.
객체기반 SW설계 팀활동지 4.
18강. 인터페이스 – II - 인터페이스와 다중상속 - 인터페이스를 통한 로봇 장남감 만들기 프로그래밍
11. 어댑터뷰 제목. 11. 어댑터뷰 제목 리스트뷰와 그리드뷰 활용법을 배운다. 갤러리와 스피너의 사용법을 익힌다.
( Windows Service Application Debugging )
OpenCV 설정 2.21 만든이 딩딩.
에어 PHP 입문.
클래스 : 기능 CHAPTER 7 Section 1 생성자(Constructor)
안드로이드 앱 개발과정 Step1. 기초과정 강사 : 정 훈 희.
01. 분산 파일 시스템의 개요 네트워크에 분산된 파일을 사용자가 쉽게 접근하고 관리할 수 있게 해준다.
Chapter 10 데이터 검색1.
12 그리드 시스템.
Android -Data Base 윤수진 GyeongSang Univ. IT 1.
Static과 const 선언 조 병 규 한 국 교 통 대 학 교 SQ Lab..
2.가상머신의 탐험 도구, Oolong에 대하여 ps lab 김윤경.
Power Java 제14장 배치 관리자.
어드민 로그인 ID : admin 비밀번호 : 서보테크 1. 제품소개 등록 - MISUBISHI
CHAP 5. 메뉴와 대화상자.
6 객체.
BoardGame 보드게임 따라가기.
Ch 4. 선택 위젯의 사용과 커스텀뷰 만들기 Assignment #1 04 – 1, 2) 08학번 정보과학과 유재윤
Presentation transcript:

Java Seminar 5

Image 그리기

Image 그리기 Panel이 존재 Panel에 그림을 그린다. Panel을 도화지라고 생각하자.

JPanel을 익명클래스로 상속한후 paintComponent를 오버라이딩한다. Image 그리기 JPanel pn = new JPanel() { @Override protected void paintComponent(Graphics g) { super.paintComponent(g); ImageIcon ii = new ImageIcon("panda.jpg"); Image img = ii.getImage(); g.drawImage(img, 10, 10, this); } }; JPanel을 익명클래스로 상속한후 paintComponent를 오버라이딩한다.

Image 그리기 JPanel pn = new JPanel() { @Override protected void paintComponent(Graphics g) { super.paintComponent(g); ImageIcon ii = new ImageIcon("panda.jpg"); Image img = ii.getImage(); g.drawImage(img, 10, 10, this); } }; ImageIcon으로 외부 이미지 파일을 불러온다. ImageIcon은 Image로 다시 이미지화 시켜준다. 그 다음 Graphics의 drawImage를 사용해서 구현시켜 준다. drawImage의 4파라메터는 이미지,x좌표,y좌표,구현시킬 위치로 선택한다.

Image 그리기 public class Main { public static void main(String[] args) { JFrame fr = new JFrame("This 프레임"); JPanel pn = new JPanel() { @Override protected void paintComponent(Graphics g) { super.paintComponent(g); ImageIcon ii = new ImageIcon("panda.jpg"); Image img = ii.getImage(); g.drawImage(img, 10, 10, this); } }; fr.setContentPane(pn); fr.setSize(500, 500); fr.setVisible(true); fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Image 그리기 그림 파일은 프로젝트에 위치시킨다.

Image 그리기 원본 그림이 더크면 나머지 부분은 잘리게된다. 더 확인하고 싶으면 프레임을 키워보자. 10,10만큼 띄어짐

출력할그림,x좌표,y좌표,가로,세로,배치할 컴포넌트가 된다. Image 그리기 JPanel pn = new JPanel() { @Override protected void paintComponent(Graphics g) { super.paintComponent(g); ImageIcon ii = new ImageIcon("panda.jpg"); Image img = ii.getImage(); g.drawImage(img, 0, 0, 300, 300, this); } }; 위처럼 파라메터가 6개인걸 선택하면 출력할그림,x좌표,y좌표,가로,세로,배치할 컴포넌트가 된다.

Image 그리기

Image 그리기 @Override protected void paintComponent(Graphics g) { super.paintComponent(g); ImageIcon ii = new ImageIcon("panda.jpg"); Image img = ii.getImage(); g.drawImage(img, 0, 0, this.getWidth(), this.getHeight(), this); } this는 자기자신이므로 여기서는 익명클래스 Jpanel을 의미한다. 위와 같이 코드를 짜게되면 화면(Panel)의 크기대로 그림을 정할 수 있다.

Image 그리기 프레임의 크기를 늘렸다 줄였다 한번 해보자.

Image 그리기 @Override protected void paintComponent(Graphics g) { super.paintComponent(g); ImageIcon ii = new ImageIcon("panda.jpg"); Image img = ii.getImage(); g.drawImage(img, 0, 0, this.getWidth(), this.getHeight(), this); System.out.println("paint호출 순간!"); } paintComponent는 우리가 명시적이게 호출하는게 아니라 콜백(대리호출)에의해서 호출하게된다. 그럼 어느 타이밍에 이 메소드가 실행될까? 창을 늘렸다,줄였다 하면서 확인해보자.

Image 그리기 public class Main { public static int x; public static int y; public static void main(String[] args) { JFrame fr = new JFrame("This 프레임"); JPanel pn = new JPanel() { @Override protected void paintComponent(Graphics g) { super.paintComponent(g); ImageIcon ii = new ImageIcon("panda.jpg"); Image img = ii.getImage(); g.drawImage(img, x, y, this.getWidth(), this.getHeight(), this); } }; fr.addKeyListener(new KeyListener() { public void keyTyped(KeyEvent e) { public void keyReleased(KeyEvent e) {

Image 그리기 동작하지는 않는다. 그 이유는 뭘까? @Override public void keyPressed(KeyEvent e) { switch (e.getKeyCode()) { case KeyEvent.VK_LEFT: x-=10; break; case KeyEvent.VK_RIGHT: x+=10; case KeyEvent.VK_UP: y-=10; case KeyEvent.VK_DOWN: y+=10; } }); fr.setContentPane(pn); fr.setSize(500, 500); fr.setVisible(true); fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 동작하지는 않는다. 그 이유는 뭘까?

Image 그리기 @Override public void keyPressed(KeyEvent e) { switch (e.getKeyCode()) { case KeyEvent.VK_LEFT: x-=10; pn.repaint(); break; case KeyEvent.VK_RIGHT: x+=10; case KeyEvent.VK_UP: y-=10; case KeyEvent.VK_DOWN: y+=10; }

Swing 문제

Swing 문제 1 컨탠트팬에 하나의 레이블이 달려있다. 레이블은 컨탠트 팬의 전체를 차지한다. 컨탠트 팬은 흰색(255,255,255)이다. 일반적으로 레이블은 포커스를 얻지 못한다. 따라서 클릭을 하면 포커스를 얻도록 수정하라. 그리고 키를 타이핑하면 레이블에 표시되도록 하라. 대신 백스페이스를 누를 경우 쓴 글자가 지워지게 하라. 프레임 크기는 500*500이다.

Swing 문제 1 힌트 1.다른 레이아웃을 쓰면 레이블이 화면 전체를 가리지 못한다. 단 그리드레이아웃의 경우에는 무조건 비율에 비례하므로 1행 1열짜리를 만들면 전체를 채울 수 있다. 2.특정 컴포넌트에 강제로 포커스를 주는 메소드는 requestFocus라는 메소드이다. 3.백스페이스는 일종의 타이핑으로 취급되므로 keytyped메소드에서 콜백된다.e.getKeyChar()==KeyEvent.VK_BACK_SPACE라는 구문을 사용해서 true면 백스페이스를 누른 것이다.

Swing 문제 2 컨탠트팬은 총 5구역으로 나눠져 있다. 그 중에서 2구역에는 체크박스가 3개 존재하고 3구역에서는 라디오버튼이 두개 존재한다. 라디오버튼은 두개 동시에 누를 수 없다. 마지막 5구역의 버튼을 눌렀을 경우 4구역의 결과에 체크한 결과가 다음과 같이 뜨게 하라. 프레임의 크기는 500*500이다.

Swing 문제 2 사용한 언어가 없다면 왼쪽과 같이 뜨게 하라.

Swing 문제 2 사용한 언어가 있다면 왼쪽과 같이 뜨게 하라.

Swing 문제 2 힌트 1.총 5구역이 균등하게 분할되어 있으므로 gridlayout으로 5구역 분할해서 사용하는게 바람직하다. 2구역과 3구역은 여러 개의 컴포넌트가 들어가는데 flowlayout으로 하는게 깔끔하게 보기좋다. 2.라디오 버튼은 그냥두는게아니라 ButtonGroup으로 묶어야 둘중 하나만 선택이 된다. ButtonGroup클래스로 둘을 묶어주어라. 예제가 필요하다면 블로그를 확인하라. 3.결과에 사용할 문자열은 두번 세번 작동을 해도 그 결과가 나오게 해야한다. 첫번째 버튼을 눌렀을때 제대로 작동하고 두번째 버튼을 눌렀을 때도 제대로 작동해야한다.

Swing 문제 3

Swing 문제 3 프레임의 크기는 900*500이다. 총 3구역이 있고 3구역의 비율은 같다. 왼쪽은 list이며 가운데는 3가지의 레이블을 가지고 있고 3가지의 레이블의 간격은 동일하다. 마지막 구역은 3개의 레이블과 3개의 텍스트필드, 그리고 버튼이 4칸짜리 구역에 각각 배치되어있다. 텍스트필드에 각각 값을 집어넣으면 Person클래스(이름,성별,나이)에 값이 저장된다. 그리고 그 Person클래스는 배열로 만들어져있고 추가 즉시 리스트는 갱신된다. 리스트에 목록을 누르면 다시 이름과 성별 나이가 출력되게 하라.

Swing 문제 3

Swing 문제 3

Swing 문제 3 힌트 1.배열은 일일히 늘리기 귀찮으므로 100개를 잡고 만들어라. 보여주는 리스트 목록은 문자열 배열만 가능하므로 문자열 배열을 100칸으로 같이 만들어준다. 배열은 이미 크기를 100칸으로 잡아서 length로 확인이 불가능하므로 따로 count라는 변수를 둬서 크기를 관리하라. 2.패널들은 레이아웃을 gridlayout을 적극활용하면 배치에는 큰 문제가 없다. 3.텍스트 필드의 경우 안에 아무것도 안적으면 텍스트필드의 크기가 현저히 작다. 이때 생성자안에 숫자를 집어넣으면 그 숫자만큼 길어진다. 예를들어 new JTextField(10)같은 형식으로 사용하면된다. 4.내가 배열에 새로 값을 추가시켜도 GUI에 바로 반영되지 않는다. 따라서 다시 반영시켜줄 필요가 있다.