Java Seminar Chapter 4.

Slides:



Advertisements
Similar presentations
자바 5.0 프로그래밍.
Advertisements

어서와 Java는 처음이지! 제3장선택과 반복.
명품 JAVA Essential.
- 계산기 GUI 구성하기 - 조원: 박강국 오정은 이귀식 김도윤 안영진.
제 12일 그래픽사용자인터페이스 (Graphic User Interface)
그래픽 프로그래밍 (GUI - Graphic User Interface)
Ch.22 Command Pattern 장 덕 성 계명대학교 컴퓨터공학과 정보공학실험실
컴퓨터 응용 및 실습 Part1. OOP&Java Programming data type Review
9장. 스윙 프로그래밍.
10장. 이벤트 처리와 그래픽 프로그래밍.
GUI 이벤트, 이벤트 리스너와 이벤트 소스 그림 그리기 내부 클래스
제7장 이벤트 프로그래밍.
명품 JAVA Essential.
7장 배열 ②.
Java Seminar 6.
7장 배열 ③.
레이아웃 관리자 스윙 구성요소 비트박스 프로그램
명품 JAVA Programming 제 13 장 스레드와 멀티태스킹.
컴퓨터 프로그래밍 실습 #7 제 4 장 GUI 클래스 작성.
Java Seminar Chapter3.
명품 JAVA Essential.
명품 JAVA Programming.
4부 클래스 라이브러리 “4부에서는 자바 언어의 API인 클래스 라이브러리에 관해 설명합니다
Chap14 스윙(SWING) 14.1 스윙 컴포넌트 14.2 컴포넌트의 이벤트 처리
자바란 무엇인가? JDK의 다운로드 및 설치 방법 Hello, Java 프로그램의 작성 자바 프로그램의 작동 원리
제 4 장 클래스 작성 Lab 4- 2.
9장 AWT(1).
Lesson 11. 이벤트.
Chapter 02 자바 기본구조 자바 프로그래밍의 기초적인 문법을 소개
명품 JAVA Essential.
명품 JAVA Programming.
명품 JAVA Essential.
[INA470] Java Programming Youn-Hee Han
Choi Younghwan CSE HUFS
java.awt 패키지의 단순 컴포넌트와 이벤트 처리
JAVA 프로그래밍 6장 객체지향프로그래밍의 핵심.
Power Java 제10장 배열.
Chapter 12. Awt와 Swing Chapter 13. 배치 관리자 Chapter 14. 이벤트 관리자
Java로 배우는 디자인패턴 입문 Chapter 22. Command 명령을 클래스로 만든다
Swing 컴포넌트 텍스트 컴포넌트 텍스트 필드 텍스트 영역 스크롤 페인 체크 박스 라디오 버튼.
이벤트 프로그래밍 안혜선.
10장 예외 Lab 10-2.
5장 조건과 반복 ③.
명품 Java Programming.
명품 JAVA Essential.
2장 자바환경과 자바 프로그램 2.1 자바 개발 환경 2.2 자바 통합환경 2.3 자바 응용 프로그램과 애플릿 프로그램
메모장 구동.
9장 AWT(1).
GUI 프로그래밍과 AWT 컴퓨터 공학실험(I) 인공지능 연구실.
명품 JAVA Programming 제 15 장 애플릿과 멀티미디어.
제 9주 이벤트 처리 그래픽프로그래밍1 제 9주 강의 목표
6장 객체-지향 설계 ①.
제 4주 2014년 1학기 강원대학교 컴퓨터학부 담당교수: 정충교
4장 Random Number 프로그래밍 언어 실험실 석사 3학기 박중기
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
제2장 데이터 및 수식.
6장 객체-지향 설계 ①.
03. 안드로이드를 위한 Java 문법 제목. 03. 안드로이드를 위한 Java 문법 제목.
Ch.1 Iterator Pattern <<interface>> Aggregate +iterator
제 2장 어휘구조와 자료형 토 큰 리 터 럴 주 석 자 료 형 배 열 형.
컴퓨터공학실습(I) 3주 인공지능연구실.
자바 5.0 프로그래밍.
Java 3장. 자바의 기본 구조 I : 변수, 자료형, 연산자 public class SumTest {
제 4 장 클래스 작성 Lab 4- 2.
Outline 클래스의 해부 캡슐화(Encapsulation) 메쏘드의 해부 그래픽 객체(Graphical Objects)
GUI 프로그래밍과 AWT 컴퓨터 공학실험(I) 인공지능 연구실.
JVM의 구조와 메모리 모델 JVM의 내부 구조 클래스 파일 클래스 로더 메소드(method) 영역 힙(heap) 영역
Chapter 4 클래스 작성.
Power Java 제16장 이벤트 처리.
Java의 정석 제 7 장 객체지향개념 II-3 Java 정석 남궁성 강의
Presentation transcript:

Java Seminar Chapter 4

래퍼클래스(Wrapper Class)

Wrapper Class int나 float, double같은 기본타입들은 클래스 타입이 아니므로 메소드나 필드를 가질 수 없다. 그런데 기본타입을 클래스처럼 사용하고 싶다면?

Wrapper Class public class Main { public static void main(String []args) { Integer i = 10; Float f = 3.14f; Character c = 'A'; System.out.println(i.toString()); System.out.println(f.compareTo(3.15f)); System.out.println(c.toString()); }

일반화 프로그래밍과 Generic

Generic package com.jiharu.generic; public class Point { int x; int y; } 만약 int형 필드가 아니라 다른 타입을 원한다면?

Generic package com.jiharu.generic; public class Point<E> { E x; E y; } Generic으로 만들면 타입 자체를 일종의 변수로 지정할 수 있다.

Generic package com.jiharu.generic; public class Point<E> { private E x; private E y; public Point(E x, E y) { this.x = x; this.y = y; } public E getX() { return x; public void setX(E x) { this.x = x; } public E getY() { return y; public void setY(E y) { this.y = y; @Override public String toString() { return "Point [x=" + x + ", y=" + y + "]";

Generic package com.jiharu.generic; 제네릭 인자로 class만 가능 public class Main { public static void main(String[] args) { Point<Integer> pi = new Point<Integer>(10, 20); Point<String> ps = new Point<String>("10단위", "20단위"); Point<Float> pf = new Point<>(3.5f,6.7f); System.out.println(pi.toString()); System.out.println(ps.toString()); System.out.println(pf.toString()); } 제네릭 인자로 class만 가능

Event

Event

Event JButton []btn = new JButton[4]; for (int i = 0; i < 4; i++) { btn[i] = new JButton(i + "번"); rightPn.add(btn[i]); } rightPn.setLayout(new GridLayout(4, 1)); pn.setLayout(new GridLayout(1, 2)); fr.setContentPane(pn); pn.setBackground(new Color(255, 125, 125)); rightPn.setBackground(new Color(125, 255, 125)); lbl.setHorizontalAlignment(SwingConstants.CENTER); pn.add(lbl); pn.add(rightPn); fr.setSize(600, 400); fr.setVisible(true); package com.jiharu.main; import java.awt.Color; import java.awt.GridLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.SwingConstants; public class Main { public static void main(String[] args) { String result = "누른 버튼 : "; JFrame fr = new JFrame("This 프레임"); JPanel pn = new JPanel(); JPanel rightPn = new JPanel(); JLabel lbl = new JLabel(result);

Event 버튼을 누르면 옆 레이블에 무슨 버튼을 눌렀는지 뜨게하자!

Event-Action Action 이벤트는 각 컴포넌트별로 그 컴포넌트에 가장 어울리는 행동을 했을때 작동하는 기본적인 이벤트. 버튼은 보통 누르기 위해서 사용하므로 눌렀을 때 이벤트 발생.

Event-Action JButton []btn = new JButton[4]; for (int i = 0; i < 4; i++) { btn[i] = new JButton(i + "번"); rightPn.add(btn[i]); btn[i].addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JButton thisButton = (JButton) e.getSource(); lbl.setText(result+thisButton.getText()); } }); rightPn.setLayout(new GridLayout(4, 1)); pn.setLayout(new GridLayout(1, 2)); fr.setContentPane(pn); pn.setBackground(new Color(255, 125, 125)); rightPn.setBackground(new Color(125, 255, 125)); lbl.setHorizontalAlignment(SwingConstants.CENTER); pn.add(lbl); pn.add(rightPn); fr.setSize(600, 400); fr.setVisible(true); package com.jiharu.main; import java.awt.Color; import java.awt.GridLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.SwingConstants; public class Main { public static void main(String[] args) { String result = "누른 버튼 : "; JFrame fr = new JFrame("This 프레임"); JPanel pn = new JPanel(); JPanel rightPn = new JPanel(); JLabel lbl = new JLabel(result);

Event-Action 누른 버튼의 번호가 레이블에 표 시된다.

Event-Action AectionEvent 일어난 이벤트 AectionListener 해당 이벤트를 감지하는 이벤트 리스너 btn[i].addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JButton thisButton = (JButton) e.getSource(); lbl.setText(result+thisButton.getText()); } }); AectionListener 해당 이벤트를 감지하는 이벤트 리스너 e.getSource() 일어난 이벤트를 발생시킨 컴포넌트(이벤트 소스)

Event-Key Keyboard를 눌렀을 때 발생하는 이벤트 모든 컴포넌트가 이벤트가 발생하는게 아니라 포커스를 가져야만 발생함.

Event-Key JLabel lbl = new JLabel("Label"); JTextField tf = new JTextField(); JButton btn = new JButton("Button"); JList<String> ls = new JList<>(); ls.setListData(list); lbl.addKeyListener(new MyKeyListener()); tf.addKeyListener(new MyKeyListener()); btn.addKeyListener(new MyKeyListener()); ls.addKeyListener(new MyKeyListener()); pn.add(lbl); pn.add(tf); pn.add(btn); pn.add(ls); fr.setContentPane(pn); fr.setSize(500, 500); fr.setVisible(true); } package com.jiharu.main; import java.awt.GridLayout; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.JList; import javax.swing.JTextField; public class Main { public static void main(String[] args) { String []list = {"자바","파이썬","R"}; JFrame fr = new JFrame("This 프레임"); JPanel pn = new JPanel(); pn.setLayout(new GridLayout(2, 2));

Event-Key public class MyKeyListener implements KeyListener{ @Override public void keyPressed(KeyEvent e) { } public void keyReleased(KeyEvent e) { System.out.println(e.getSource().getClass().getName()); public void keyTyped(KeyEvent e) {

Event-Key 레이블에서는 키이벤트가 동작하지 않는다. 이유는 포커스 때문!

Event-Key key event keyTyped - 키가 타이핑 됬을때 발생하는 이벤트. 말그대로 타이핑이 되야하므로 타이핑이 되지 않는 보조키는 작동치 않음. keyReleased - 어떤 키던 상관없이 키가 놓아졌을 때 발생하는 이벤트 keyPressed - 어떤 키던 상관없이 키가 눌러졌을 때 발생하는 이벤트

Event-Key KeyEvent메소드 (e.으로 사용) getKeyChar - 타이핑된 key값을 반환. 사실상 키보드랑은 무관하게 타이핑된 값을 반환. getKeyCode - 타이핑된 키보드의 배치에 따른 값을 정수로 반환. 이 메소드덕분에 왼쪽 ctrl과 오른쪽 ctrl들을 구별가능 getkeyLocation -  키보드의 배치를 총 4군데로 나누는데 1이 키보드 전체, 2가 왼쪽 보조키, 3이 오른쪽 보조키, 4가 키패드 paramString - key보드에 관련된 전체 파라메터 반환 getWhen - 얼마나 눌러졌는지 isControlDown - Control이 눌러졌는지 isShiftDown - Shift가 눌러졌는지 isAltDown - Alt가 눌러졌는지 isMetaDown = Meta키가 눌러졌는지(맥으로 따지면 cmd, 윈도우에서는 window,몇몇 키보드에 존재하는 meta(◇)키)

Event-Mouse Mouse의 움직임을 감지하는 리스너 다른 리스너들과 다르게 총 4가지(사실상 3가지)의 리스너가 존재한다.

Event-Mouse MouseListener 시리즈 MouseMotionListener : Mouse가 드래그 됬는지, 움직였는지를 포착 MouseInputListener : MouseListener + MouseMotionListener MouseWheelListener : Mouse의 휠이 움직였을때 발생하는 이벤트

Event-Mouse for (int i = 0; i < bt.length; i++) { bt[i] = new JButton("Button" + i); if(i%2==0) { bt[i].addMouseListener(new MyMouseListener(i)); } else { bt[i].addMouseMotionListener(new MyMouseListener(i)); pn.add(bt[i]); pn.add(bt[0]); pn.add(bt[1]); pn.add(bt[2]); pn.add(bt[3]); fr.setContentPane(pn); fr.setSize(400, 300); fr.setVisible(true); package com.jiharu.main; import java.awt.GridLayout; import java.awt.event.MouseEvent; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.event.MouseInputListener; public class Main { public static void main(String[] args) { JFrame fr = new JFrame("This 프레임"); JPanel pn = new JPanel(); JButton[] bt = new JButton[4]; GridLayout gl = new GridLayout(2, 2); pn.setLayout(gl);

Event-Mouse class MyMouseListener implements MouseInputListener { private int btnNumber; public MyMouseListener(int btnNumber) { this.btnNumber = btnNumber; } @Override public void mouseClicked(MouseEvent e) { System.out.println(e.getSource().getClass().getName() + btnNumber); System.out.println("Click Event"); System.out.println("Click Count : " + e.getClickCount()); System.out.println("Click Point : " + e.getPoint().toString()); public void mousePressed(MouseEvent e) { System.out.println("Click Pressed");

Event-Mouse @Override public void mouseReleased(MouseEvent e) { System.out.println(e.getSource().getClass().getName() + btnNumber); System.out.println("Click Released"); System.out.println("Click Count : " + e.getClickCount()); System.out.println("Click Point : " + e.getPoint().toString()); } public void mouseEntered(MouseEvent e) { System.out.println("Click Entered");

Event-Mouse @Override public void mouseExited(MouseEvent e) { System.out.println(e.getSource().getClass().getName() + btnNumber); System.out.println("Click Exited"); System.out.println("Click Count : " + e.getClickCount()); System.out.println("Click Point : " + e.getPoint().toString()); } public void mouseDragged(MouseEvent e) { System.out.println("Click Dragged"); public void mouseMoved(MouseEvent e) { System.out.println("Click Moved");

Event-Mouse 각각의 버튼에 어떠한 이벤트가 작동하는지 확인해보자.

Event-Item ItemSelectable을 상속받은 컴포넌트만 사용가능

Event-Item package com.jiharu.main; import java.awt.GridLayout; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import javax.swing.JCheckBox; import javax.swing.JFrame; import javax.swing.JPanel; public class Main { public static void main(String[] args) { JFrame fr = new JFrame("This 프레임"); JPanel pn = new JPanel(); JCheckBox[] chk = new JCheckBox[4]; GridLayout gl = new GridLayout(2, 2); pn.setLayout(gl); for (int i = 0; i < chk.length; i++) { chk[i] = new JCheckBox("Check" + i); chk[i].addItemListener(new MyItemListener()); pn.add(chk[i]); } pn.add(chk[0]); pn.add(chk[1]); pn.add(chk[2]); pn.add(chk[3]); fr.setContentPane(pn); fr.setSize(400, 300); fr.setVisible(true);

Event-Item class MyItemListener implements ItemListener { @Override public void itemStateChanged(ItemEvent e) { JCheckBox chk = (JCheckBox) e.getSource(); System.out.println("Text : " + chk.getText()); System.out.println("Selected : " + chk.isSelected()); System.out.println("StateChange : " + e.getStateChange()); System.out.println("Item : " + e.getItem()); System.out.println("ItemSelecable :" + e.getItemSelectable()); }

Event-Item 체크를 풀었다 해제했다 하면서 각각의 메소드가 어떤 역할을 하는지 보자.

Event-Window 윈도우 창에 대한 이벤트

Event-Window WindowListener의 메소드 windowOpened : 윈도우가 처음 생성됬을 때 발생 windowIconified : 윈도우가 최소화 됬을 때 발생 windowDeiconified : 윈도우가 최소화에서 최대화 됬을 때 발생 windowDeactivated : 윈도우가 비활성화 됬을 때 발생 windowClosing : 윈도우의 시스템 메뉴의 닫기를 시도할 때 발생 windowClosed : 윈도우가 닫힐 때 발생 windowActivated : 윈도우가 활성활 될 때 발생

Event-Window package com.jiharu.main; import java.awt.GridLayout; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; public class Main { public static void main(String[] args) { JFrame fr = new JFrame("This 프레임"); JPanel pn = new JPanel(); JLabel lbl = new JLabel("초기상황"); pn.setLayout(new GridLayout(1, 1)); pn.add(lbl); fr.setContentPane(pn); fr.addWindowListener(new WindowListener() { public void windowOpened(WindowEvent e) { System.out.println("TestSwing.main(...).new WindowListener() {...}.windowOpened()"); }

Event-Window public void windowIconified(WindowEvent e) { System.out.println("TestSwing.main(...).new WindowListener() {...}.windowIconified()"); } public void windowDeiconified(WindowEvent e) { System.out.println("TestSwing.main(...).new WindowListener() {...}.windowDeiconified()"); } public void windowDeactivated(WindowEvent e) { System.out.println("TestSwing.main(...).new WindowListener() {...}.windowDeactivated()"); } public void windowClosing(WindowEvent e) { System.out.println("TestSwing.main(...).new WindowListener() {...}.windowClosing()"); } public void windowClosed(WindowEvent e) { System.out.println("TestSwing.main(...).new WindowListener() {...}.windowClosed()"); } public void windowActivated(WindowEvent e) { System.out.println("TestSwing.main(...).new WindowListener() {...}.windowActivated()"); } }); fr.setSize(500, 500); fr.setVisible(true); } }

Event-Window 윈도우크기를 조작하면서 어떤 이벤트가 발생하는지 보자

Event-Window x버튼을 누른다고 종료되는게 아니라 사실은 껍데기만 종료되고 프로세서는 살아있다! 그러면 정말로 끌려면 어떻게 해야할까?

Event-Window @Override public void windowClosing(WindowEvent e) {                 System.exit(0); } 이제 뒤에 돌아가는 프로세서역시 같이 종료된다. 그러나 위의 방식은 AWT방식이고 Swing에서는 다른방식을 쓴다.

Event-Window import java.awt.GridLayout; import javax.swing.JFrame;   import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; public class TestSwing {     public static void main(String[] args) {         JFrame fr = new JFrame("This 프레임");         JPanel pn = new JPanel();         JLabel lbl = new JLabel("초기상황");         pn.setLayout(new GridLayout(1, 1));         pn.add(lbl);         fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);         fr.setContentPane(pn);         fr.setSize(500, 500);         fr.setVisible(true);     } }

과제 저번 계산기를 완성하시오