Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 2156
- 백준 #7568번 #파이썬 #동적계획법
- webpack
- 백준
- 포도주시식
- 크롬 익스텐션
- Message Passing
- discord.js
- C언어로 쉽게 풀어쓴 자료구조
- react
- 동적계획법
- popup
- 공부시간측정어플
- 백준 7579
- 디스코드 봇
- background script
- content script
- 파이썬
- 자료구조
- 프로그래머스 #정수삼각형 #동적계획법
- TypeScript
- 갓생
- 캠스터디
- 크롬 확장자
- X
- Chrome Extension
- nodejs
- supabase
Archives
- Today
- Total
히치키치
[명품 자바 에센셜] 실습문제 9장 본문
요약
이벤트 기반 프로그래밍
이벤트 발생에 의해 프로그램 흐름/실행되는 코드 결정
이벤트 발생 ->이벤트 리스너
: 이벤트 처리 루틴 실행배치 실행
:개발자
가 프로그램 흐름 결정이벤트 소스
: 이벤트 발생시킨 GUI 컴포넌트이벤트 객체
: 발생한 이벤트에 대한 정보 제공 객체이벤트 리스너
: 사용자가 작성한 이벤트 처리 자바 프로그램 코드이벤트 분배 스레드
: 무한 루프 돌며 이벤트 발생시이벤트 리스너
찾아 호출하는 스레드- 이벤트 처리 과정
이벤트 발생
->이벤트 객체 생성
->이벤트 리스너 찾기
->이벤트 리스너 실행
: 리스너에 이벤트 객체가 전달되며 리스너 코드 실행 getSource()
: 발생 이벤트 소스 리턴Object
타입 리턴임으로 캐스팅하여 사용ActionEvent
:JButton
: 마우스, <Enter> 키로 버튼 선택KeyEvent
:Component
: 키 누르기, 누른 키 떼기MouseEvent
:Component
: 마우스 조작- 이벤트 리스너 작성법 :
독립 클래스
,내부 클래스
: InnerClassListener.this.setTitle(b.getText()),익명 클래스
: AnnonymousClassListener.this.setTitle(b.getText()), Adapter 클래스
:ActionLister
,ItemListenr
는 메소드가 1개라 없음키 입력의 독점권
:현재포커스
가진 컴포넌트에만Key 이벤트
발생component.setFocusable(true)
: component가 포커스 받을 수 있도록 설정component.requestFocus();
: component에게 포커스 줘 키 입력 받게 함- 모든 키 입력에 호출되는
KeyListener
:keyPressed()
->keyreleased()
- 유니코드 입력에 호출되는
KeyListener
:keyPressed()
->keyTyped()
->keyreleased()
- component.addKeyListener(myKeyListener);
- char KeyEvent
.getKeyChar()
: 입력된 키의 유니 코드 값 반환
(유니코드 아닌 경우 : KeyEvent.CHAR_UNDEFINED 리턴) - int KeyEvent
.getKeyCode()
: 모든 키에 대한 정수형 키 코드 리턴
(VK_
의 가상 키 값과 비교) - 마우스 눌린 위치에서 뗄 때 호출되는 MouseListener :
mousePressed()
->mouseReleased()
->mouseClicked()
- 마우스가 드래그된 상태에서 호출되는 이벤트 :
mousePressed
->mouseDragged
-> ... ->mouseDragged
->mouseReleased
- component.addMouseListener(myMouseListener)
- component.addMouseModtionListener(myMouseMotionListener)
- MouseEvent
.getX()
, MouseEvent.getY()
: 마우스 좌표 받기 - MouseEvent
.getClickCount()
: 마우스 클릭 횟수 리턴
1번
JLabel 컴포넌트는 Mouse 이벤트를 받을 수 있다. JLabel 컴포넌트의 초기 문자열을 “자기야”라고 출력하고, 레이블에 마우스를 올리면 “사랑해”로, 내리면 “자기야”가 다시 출력되도록 프로그램을 작성하라.
package java_9;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class one extends JFrame{
public one(){
this.setTitle("Java");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
Container c = getContentPane();
c.setLayout(new FlowLayout());
JLabel label=new JLabel("자기야");
label.addMouseListener(new MouseListener() {
public void mouseEntered(MouseEvent e) {
label.setText("사랑해");
}
public void mouseExited(MouseEvent e) {
label.setText("사랑해");
}
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
public void mouseClicked(MouseEvent e) {}
});
c.add(label);
this.setSize(300,300);
this.setVisible(true);
}
public static void main(String[] args) {
new one();
}
}
2번
프레임의 컨텐트팬의 초기 색을 Color.CYAN으로 하고, R 키를 누르는 순간 배경색이 Color.RED 색으로 변했다가, 키를 떼면 다시 초기 색으로 돌아오는 프로그램을 작성하라.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class two extends JFrame{
public two() {
this.setTitle("Java");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
Container c = getContentPane();
c.setBackground(Color.CYAN);
c.addKeyListener(new KeyListener() {
public void keyPressed(KeyEvent e) {
if(e.getKeyChar() == 'R') {
c.setBackground(Color.RED);
}
}
public void keyReleased(KeyEvent e) {
c.setBackground(Color.CYAN);
}
public void keyTyped(KeyEvent e) {}
});
this.setSize(300, 300);
this.setVisible(true);
c.setFocusable(true);
c.requestFocus();
}
public static void main(String[] args) {
new two();
}
}
3번
컨텐트팬의 배경색은 초록색(Color.GREEN)으로 하고, 마우스의 드래깅 동안만 노란색(Color.YELLOW)으로 나타나는 프로그램을 작성하라. 드래깅을 멈추면 초록색이 된다
import java.awt.;
import java.awt.event.;
import javax.swing.*;
import javax.swing.*;
public class three extends JFrame{
public three() {
this.setTitle("드래깅동안...");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//this.setLocationRelativeTo(null);
Container c=getContentPane();
c.setBackground(Color.GREEN);
c.setLayout(null);
MyMouseListener listener=new MyMouseListener();
c.addMouseListener(listener);
c.addMouseMotionListener(listener);
//c.addMouseMotionListener(new MyMouseListener());
c.setBackground(Color.YELLOW);
this.setSize(300,300);
this.setVisible(true);
}
class MyMouseListener implements MouseListener,MouseMotionListener{
public void mouseReleased(MouseEvent e) {
Component c=(Component)e.getSource();
c.setBackground(Color.GREEN);
}
public void mousePressed(MouseEvent e) {}
public void mouseClicked(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mouseDragged(MouseEvent e) {
Component c=(Component)e.getSource();
c.setBackground(Color.YELLOW);
}
public void mouseMoved(MouseEvent e) {}
}
public static void main(String[] args) {
new three();
}
}
4번
JLabel 컴포넌트를 이용하여 “Love Java”를 출력하고, + 키를 치면 폰트 크기를 5픽셀씩 키우고, - 키를 치면 폰트 크기를 5픽셀씩 줄이는 스윙 응용프로그램을 작성하라. 5픽셀 이하로 작아지지 않도록 하라.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class four extends JFrame{
public four() {
this.setTitle("+,-키로 폰트...");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);;
JLabel label=new JLabel("Love Java");
Container c=getContentPane();
c.setLayout(new FlowLayout());
c.add(label);
c.addKeyListener(new KeyListener() {
public void keyPressed(KeyEvent e) {
if(e.getKeyChar()=='+') {
label.setFont(new Font("Arial", Font.PLAIN, label.getFont().getSize() + 5));
}
else if ((e.getKeyChar()=='-') && (label.getFont().getSize()>10)){
label.setFont(new Font("Arial", Font.PLAIN, label.getFont().getSize() - 5));
}
}
public void keyReleased(KeyEvent e) {}
public void keyTyped(KeyEvent e) {}
});
c.setFocusable(true);
c.requestFocus();
this.setSize(300,300);
this.setVisible(true);
}
public static void main(String[] args) {
new four();
}
}
5번
클릭 연습용 스윙 응용프로그램을 작성하라. JLabel을 이용하여 문자열 “C”인 레이블을 하나 만들고 초기 위치를 (50, 50)으로 하라. 문자열을 클릭할 때마다 레이블은 프레임 내의 랜덤한 위치로 움직인다.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class five extends JFrame{
int x,y;
public five() {
this.setTitle("Java");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c=getContentPane();
JLabel label=new JLabel("C");
c.setLayout(null);
label.setBounds(50,50,40,40);
label.addMouseListener(new MouseListener() {
public void mouseClicked(MouseEvent e) {
x = (int)(Math.random()*(getContentPane().getWidth() - label.getWidth()));
y = (int)(Math.random()*(getContentPane().getHeight() - label.getHeight()));
label.setLocation(x, y);
}
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
});
c.add(label);
this.setSize(300,300);
this.setVisible(true);
}
public static void main(String[] args) {
new five();
}
}
6번
GridLayout을 이용하여 컨텐트팬에 숫자를 담은 JLabel을 12개를 부착하고, 초기 바탕색을 모두 Color.WHITE 색으로 한다. 그리고 각 레이블 위에 마우스로 클릭하면 랜덤한 색으로 채워지도록 프로그램을 작성하라. 랜덤한 색을 만드는 방법은 예제 9-6의 코드를 참고하라.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class six extends JFrame{
public six() {
this.setTitle("3 x 4 color frame");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);;
Container c=getContentPane();
c.setLayout(new GridLayout(3,4));
this.setSize(300,300);
this.setVisible(true);
for(int i=0;i<12;i++) {
String text=Integer.toString(i);
JLabel label=new JLabel(text);
c.add(label);
label.addMouseListener(new MouseListener() {
public void mouseClicked(MouseEvent e) {
JLabel label=(JLabel)e.getSource();
int r=(int)(Math.random()*256);
int g=(int)(Math.random()*256);
int b=(int)(Math.random()*256);
label.setOpaque(true);
label.setBackground(new Color(r,g,b));
}
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
});
}
}
public static void main(String[] args) {
new six();
}
}
'명품 자바 에센셜' 카테고리의 다른 글
[명품 자바 에센셜] 실습문제 8장 (0) | 2021.09.01 |
---|---|
[명품 자바 에센셜] 실습문제 7장 (0) | 2021.09.01 |
[명품 자바 에센셜] 실습문제 6장 (0) | 2021.09.01 |
[명품 자바 에센셜] 실습문제 5장 (0) | 2021.09.01 |
[명품 자바 에센셜] 실습문제 3장 (0) | 2021.04.12 |
Comments