Bibi's DevLog ๐ค๐
[Java - AWT ํ์ต์ ๋ฆฌ] ์๋ฐ์ GUIํ๋ก๊ทธ๋๋ฐ - (2) ์ด๋ฒคํธ์ฒ๋ฆฌ, Adapterํด๋์ค, paint()์ Graphics, Image ๋ณธ๋ฌธ
[Java - AWT ํ์ต์ ๋ฆฌ] ์๋ฐ์ GUIํ๋ก๊ทธ๋๋ฐ - (2) ์ด๋ฒคํธ์ฒ๋ฆฌ, Adapterํด๋์ค, paint()์ Graphics, Image
๋น๋น bibi 2020. 11. 25. 17:54์ด ๊ธ์ ์๋ ๋งํฌ ๋ฌธ์๋ฅผ ๋ณด๋ฉฐ ๊ณต๋ถํ ๊ฒ์ ์์ฝ์ ๋ฆฌํ ๊ฒ์ ๋๋ค. ๊ฐ์ฌํฉ๋๋ค๐โ๏ธ
'์๋ฐ์ ์ ์' ๋จ๊ถ์ฑ ๋์ ๋ธ๋ก๊ทธ ์๋ฃ - AWT
์๋ ๊นํ๋ธ ๋งํฌ์์ ๊ฐ์ ๋ด์ฉ์ ๋ ํธํ๊ฒ ๋ณผ ์ ์์ต๋๋ค.
github.com/bibi6666667/Codesquad-Cocoa-JAVA/blob/main/mission/src/mission6/AWT.md
์ด๋ฒคํธ ์ฒ๋ฆฌ event handling
์ด๋ฒคํธ event ๋?
-
์ด๋ฒคํธ : ์ฌ์ฉ์ ๋๋ ํ๋ก๊ทธ๋จ ์ฝ๋์ ์ํด ๋ฐ์ํ ์ ์๋ ์ฌ๊ฑด.
- (์ฌ์ฉ์๊ฐ ๋ง์ฐ์ค๋ฅผ ์์ง์ด๊ฑฐ๋ ํด๋ฆญํจ / ํค๋ณด๋๋ฅผ ๋๋ฆ / Frame์ ํฌ๊ธฐ๋ฅผ ๋ณ๊ฒฝ ...)
-
์ด๋ฒคํธ ์์ค(event source, ์ด๋ฒคํธ ๋ฐ์์ง)
- ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ์ปดํฌ๋ํธ. (์์ : ์ฌ์ฉ์๊ฐ ๋ฒํผ์ ๋๋ฌ ์ด๋ฒคํธ ๋ฐ์ -> button์ด ์ด๋ฒคํธ ์์ค.)
-
์ด๋ฒคํธ ํธ๋ค๋ฌ(event handler, ์ด๋ฒคํธ ์ฒ๋ฆฌ๊ธฐ)
- ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ ๋ ์คํํ ์ฝ๋๋ฅผ ๊ตฌํํด ๋์ ํด๋์ค. ์ฃผ๋ก ํจ์๋ ๋ฉ์๋์ด๋ค.
-
์ด๋ฒคํธ ๋ฆฌ์ค๋(event listener, ์ด๋ฒคํธ ๊ฐ์ง๊ธฐ)
- ์ด๋ฒคํธ๋ฅผ ๊ฐ์งํ๊ณ ์ฒ๋ฆฌํ๋ ํด๋์ค.
-
์ด๋ฒคํธ ์ฒ๋ฆฌ(event handling, ์ด๋ฒคํธ ํธ๋ค๋ง)
- (์ด๋ฒคํธ ์์ค์ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ก ์ฐ๊ฒฐํ๋ ๊ฒ?)
- ์ด๋ฒคํธ์ ๋ํ ์ํ์ฝ๋๋ฅผ ์์ฑํ์ฌ ์ด๋ฒคํธ ์์ค์ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ก ๋ฑ๋กํ๋ ๊ฒ.
- ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋๋ผ๋, ๊ทธ์ ๋ํ ์ด๋ฒคํธ ์ฒ๋ฆฌ๋ฅผ ํ์ง ์์ผ๋ฉด ์๋ฌด ์ผ๋ ์ผ์ด๋์ง ์์.
-
์ฌ์ค ์ฌ์ฉ์๊ฐ AWTํ๋ก๊ทธ๋จ์ ์ฌ์ฉํ๋ฉด์ ํ๋ ๋ชจ๋ ๋์์ด ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ํจ๋ค.
๋จ์ง ์ด๋ฒคํธ์ ๋ํ ์ด๋ฒคํธ ์ฒ๋ฆฌ๊ฐ ๋์ด์์ง ์๊ธฐ ๋๋ฌธ์ ์๋ฌด ์ผ๋ ์ผ์ด๋์ง ์๋ ๊ฒ.
์ด๋ฒคํธ์ ๋ฐ์๊ณผ ์ฒ๋ฆฌ
- ์ด๋ฒคํธ ๋ฐ์
- ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด ํด๋น ์ด๋ฒคํธ ํด๋์ค์ ์ธ์คํด์ค๊ฐ ์์ฑ๋จ.
- ์ด๋ฒคํธ ์ฒ๋ฆฌ๊ฐ ๋์ด ์๋์ง ํ์ธ
- = ์ด๋ฒคํธ ๋ฆฌ์ค๋๊ฐ ์ด๋ฒคํธ ์์ค์ ๋ฑ๋ก๋์ด ์๋์ง ํ์ธ.
3-1. (์ด๋ฒคํธ ์ฒ๋ฆฌ๊ฐ ๋์ด ์๋ค๋ฉด) ์ด๋ฒคํธ ๋ฆฌ์ค๋๊ฐ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํจ.
3-2. (์ด๋ฒคํธ ์ฒ๋ฆฌ๊ฐ ๋์ด ์์ง ์๋ค๋ฉด) ์๋ฌด ์ผ๋ ์ผ์ด๋์ง ์์.
- = ์ด๋ฒคํธ ๋ฆฌ์ค๋๊ฐ ์ด๋ฒคํธ ์์ค์ ๋ฑ๋ก๋์ด ์๋์ง ํ์ธ.
- ์ด๋ฒคํธ ์ฒ๋ฆฌ๋ "์์ธ์ฒ๋ฆฌ"์ ์ ์ฌํ๋ค.
- ๋ ๋ค ํด๋์ค์ ์ธ์คํด์ค๊ฐ ์์ฑ๋๊ณ , ์ผ์นํ๋ catch๋ธ๋ญ/Listener๊ฐ ์์ธ/์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํจ.
์ด๋ฒคํธ ์ฒ๋ฆฌ๋ฐฉ๋ฒ
-
์ด๋ฒคํธ ์ฒ๋ฆฌ(event handling)
- (AWTํ๋ก๊ทธ๋จ ์คํ ์ค) ์ฌ์ฉ์์ ์ด๋ค ๋์์ ์ํด ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ ๋, ์ด์ ๋ํ ์ด๋ค ์์ ์ด ์ํ๋๋๋ก ํ๋ ๊ฒ.
-
์ด๋ฒคํธ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ
- (์ด๋ฒคํธ ๋ฆฌ์ค๋ ์ ํ) โ ์ด๋ฒคํธ ๋ฆฌ์ค๋ ์ถ๊ฐ/์ ๊ฑฐ ๋ฉ์๋๋ค ์ค์์ ํ์ํ ๊ฒ์ ์ฐพ๋๋ค.
*(์์)์ฐฝ๋ซ๊ธฐ ๋ฒํผ ๋๋ฆผ. ๋ง์ฐ์ค ์ผ์ชฝ ํด๋ฆญ .. - (์ด๋ฒคํธ ํธ๋ค๋ฌ ์์ฑ) ์ ํํ ๋ฉ์๋๊ฐ ์ํด์๋ โก์ด๋ฒคํธ ๊ด๋ จ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ํด๋์ค๋ฅผ ์์ฑํ๋ค.
- (์ด๋ฒคํธ ๋ฆฌ์ค๋ ์์ฑ) ์์์ ๊ตฌํํ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์์ฑํด ์ด๋ฒคํธ ์์ค์ Listener๋ก ๋ฑ๋กํ๋ค.
- โ EventHandlerํด๋์ค๋ WindowListener์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํด์ผ ํจ.
- ๋ฐ๋ผ์ WindowListener์ธํฐํ์ด์ค์ ์ ์๋์ด ์๋ ๋ชจ๋ ์ถ์ ๋ฉ์๋์ body๋ถ๋ถ์ ๋ง๋ค์ด ์ฃผ์ด์ผ ํจ.
- ๊ทธ๋์ ์๋ฌด ๋ด์ฉ๋ ์๋ ๋ฉ์๋๋ค๋ ๋ง๋ ๊ฒ. (๋ด์ฉ์ ์์ง๋ง ๋ฉ์๋ body๋ค์ด ์์ด์ผ ํ๋ค)
- ์ด๋ ๊ฒ body(ํ)๋ง ์๋ ๋ฉ์๋๋ค์ ํธ์ถ๋์ด๋ ์คํํ ๋ฌธ์ฅ์ด ์์ผ๋ฏ๋ก ๋ฐ๋ก ์ข ๋ฃ๋๋ค.
- (์ด๋ฒคํธ ๋ฆฌ์ค๋ ์ ํ) โ ์ด๋ฒคํธ ๋ฆฌ์ค๋ ์ถ๊ฐ/์ ๊ฑฐ ๋ฉ์๋๋ค ์ค์์ ํ์ํ ๊ฒ์ ์ฐพ๋๋ค.
โก์ด๋ฒคํธ ๊ด๋ จ ์ธํฐํ์ด์ค ๋ฐ AWT์ด๋ฒคํธ์ ์ฃผ์ ๋ฉ์๋
-
โป AWT์ด๋ฒคํธ๋ค์ ์ต๊ณ ์กฐ์์ AWTEvent์ด๋ค.
-
โป ์ด๋ฒคํธ ๊ด๋ จ ํด๋์ค๋ค์
java.awt.event
ํจํค์ง์ ์ํ๋ค. -
๊ฐ Listener๋ค์ ์ถ๊ฐ/์ ๊ฑฐํ๋ ๋ฉ์๋(๊ณตํต)
- ์ถ๊ฐ :
void add๋ฆฌ์ค๋์ด๋ฆ(์ด๋ฒคํธํธ๋ค๋ฌ์ด๋ฆ)
- ์ ๊ฑฐ :
void remove๋ฆฌ์ค๋์ด๋ฆ(์ด๋ฒคํธํธ๋ค๋ฌ์ด๋ฆ)
- ์ถ๊ฐ :
-
โ ๊ฐ ๋ฉ์๋์์๋ ๋ฐ์ํ ์ด๋ฒคํธ์ ์ธ์คํด์ค์ ๋ํ ์ฐธ์กฐ๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
-
๋ฐ๋ผ์ ์ด๋ฒคํธ ๋ฐ์ ์ ์์ฑ๋ ์ด๋ฒคํธ ์ธ์คํด์ค๋ค์ ๋ฉ์๋ ์ญ์ ์ฌ์ฉํ ์ ์๋ค!
-
์๋๋ AWT์ด๋ฒคํธ ์ข ๋ฅ, ์ด๋ฒคํธ๋ณ ์ฃผ์ ๋ฉ์๋ ๋ฐ ๊ด๋ จ ์ธํฐํ์ด์ค(
~Listener
) ์ด๋ค.โป ๊ตฌ๋ถ
~Event
: AWT์ด๋ฒคํธ~Listener
: ๊ฐ ์ด๋ฒคํธ์ ์ด๋ฒคํธ๋ฆฌ์ค๋ = ์ธํฐํ์ด์ค~Listener
ํ์ ๋ฉ์๋ : ๊ฐ ์ด๋ฒคํธ ์ธํฐํ์ด์ค์ ์ํ๋ ๋ฉ์๋.- ๊ตต์๊ธ์จ ๋ฉ์๋ : ๊ฐ ์ด๋ฒคํธ์ ์ฃผ์ ๋ฉ์๋.
-
๋ชจ๋ ์ด๋ฒคํธ ๊ณตํต ์ฃผ์ ๋ฉ์๋
Object getSource()
: ์ด๋ฒคํธ ์์ค๋ฅผ ๋ฐํ.- java.utilํจํค์ง์ EventObject์ ์ ์๋์ด ์๋ ๋ฉ์๋
String paramString()
: ์ด๋ฒคํธ์ ๊ด๋ จ๋ ์ ๋ณด๋ฅผ ๋ฌธ์์ด๋ก ๋ฐํ.- java.awtํจํค์ง์ AWTEvent์ ์ ์๋์ด ์๋ ๋ฉ์๋
-
ActionEvent
ActionListener
actionPeformed(ActonEvent ae)
String getActionCommand()
: ์ด๋ฒคํธ์ ActionCommand๋ฅผ ๋ฐํ.int getModifiers()
: ์ด๋ฒคํธ ๋ฐ์ ์ ๋๋ฅด๊ณ ์๋ ํน์ํค๋ฅผ ๋ฐํ.long getWhen()
: ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ์๊ฐ์ long๊ฐ์ผ๋ก ๋ฐํ.
-
ComponentEvent
ComponentListener
componentMoved(ActonEvent ae)
componentHidden(ActonEvent ae)
componentResized(ActonEvent ae)
componentShown(ActonEvent ae)
Component getComponent()
: ์ด๋ฒคํธ ์์ค(์ปดํฌ๋ํธ)๋ฅผ ๋ฐํํ๋ค.
-
MouseEvent
MouseMotionListener
mouseDragged(MouseEvent me)
mouseMoved(MouseEvent me)
MouseListener
mousePressed(MouseEvent me)
mouseReleased(MouseEvent me)
mouseEntered(MouseEvent me)
mouseExited(MouseEvent me)
mouseClicked(MouseEvent me)
int getClickCount()
: ๋ง์ฐ์ค๋ฅผ ํด๋ฆญํ ํ์๋ฅผ ๋ฐํ.Point getPoint()
: ์ด๋ฒคํธ๊ฐ ์ผ์ด๋ ์์น๋ฅผ ๋ฐํ.int getX()
: ์ด๋ฒคํธ๊ฐ ์ผ์ด๋ ์์น์ x์ขํ๋ฅผ ๋ฐํ.int getY()
: ์ด๋ฒคํธ๊ฐ ์ผ์ด๋ ์์น์ y์ขํ๋ฅผ ๋ฐํ.
-
MouseWheelEvent
MouseWheelListener
mouseWheelMoved(MouseWheelEvent e)
int getScrollAmount()
: ์คํฌ๋กค๋์ด์ผ ํ๋ ์(amount)์ ๋ฐํ.int getScrollType()
: ์ด๋ค ์คํฌ๋กคํ์ ์ ์ํด ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋์ง ์๋ ค์ค.int getUnitsToScroll()
: ๋จ์๋น ์คํฌ๋กคํด์ผ ํ๋ ์์ ๋ฐํ.int getWheelRotation()
: ๋ง์ฐ์ค ํ ์ด ์ด๋ํ ๋ฐฉํฅ์ ์๋ ค์ค.
-
KeyEvent
KeyListener
keyPressed(KeyEvent ke)
keyReleased(KeyEvent ke)
keyTyped(KeyEvent ke)
char getKeyChar()
: ๋๋ฌ์ง ํค๋ฅผ ๋ฐํ.int getKeyCode()
: ๋๋ฌ์ง ํค์ ์ฝ๋๋ฅผ ๋ฐํ.String getKeyModifiersText(int modifiers)
: ๋๋ฌ์ง ํน์ํค(Alt, Ctrl) ๋๋ ํน์ํค ์กฐํฉ์ ์ค๋ช ํ๋ ๋ฌธ์์ด์ ๋ฐํ.String getKeyText(int keyCode)
: ๋๋ฌ์ง ํค๋ฅผ HOME, F1๊ณผ ๊ฐ์ด ํค๋ฅผ ์ค๋ช ํ๋ ๋ฌธ์์ด๋ก ๋ฐํ.
-
TextEvent
TextListener
textValueChanged(TextEvent te)
-
FocusEvent
FocusListener
focusGained(FocusEvent fe)
focusLost(FocusEvent fe)
Component getOppositeComponent()
: ํฌ์ปค์ค๋ฅผ ์์ ์ปดํฌ๋ํธ๋ฅผ ๋ฐํ.
-
ItemEvent
ItemListener
itemStateChanged(ItemEvent ie)
Object getItem()
: ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ item์ ๋ฐํ.ItemSelectable getItemSelectable()
: ์ด๋ฒคํธ ์์ค๋ฅผ ๋ฐํ.int getStateChange()
: item์ ์ํ(์ ํ/์ ํํด์ )๋ฅผ ๋ฐํ.
-
AdjustmentEvent
AdjustmentListener
adjustmentValueChanged(AdjustmentEvent ae)
Adjustable getAdjustable()
: ์ด๋ฒคํธ ์์ค๋ฅผ ๋ฐํ.int getAdjustmentType()
: ๊ฐ์ ๋ณ๊ฒฝ์ํจ ๋ฐฉ๋ฒ์ ์๋ ค์ค.int getValue()
: ์ด๋ฒคํธ ๋ฐ์ ์์ (์คํฌ๋กค๋ฐ์)๊ฐ์ ๋ฐํ.boolean getValueIsAdjusting()
: ๊ฐ์ด ๋ณ๊ฒฝ๋๊ณ ์๋ ์ค์ธ์ง ์๋ ค์ค.
-
WindowEvent
WindowListener
windowClosing(WindowEvent we)
windowOpened(WindowEvent we)
windowIconified(WindowEvent we)
windowDeiconified(WindowEvent we)
windowClosed(WindowEvent we)
windowActivated(WindowEvent we)
windowDeactivated(WindowEvent we)
WindowFocusListener
windowGainedFocus(WindowEvent e)
windowLostFocus(WindowEvent e)
WindowStateListener
windowStateChanged(WindowEvent e)
int getNewState()
: ์๋์ฐ์ ํ์ฌ ์ํ๋ฅผ ๋ฐํ.int getOldState()
: ์๋์ฐ์ ์ด์ ์ํ๋ฅผ ๋ฐํ.Window getOppositeWindow()
: ์ด๋ฒคํธ ๋ฐ์ ์ ํฌ์ปค์ค๋ฅผ ๊ฐ์ก๋ ์๋์ฐ๋ฅผ ๋ฐํ.Window getWindow()
: ์ด๋ฒคํธ ์์ค๋ฅผ ๋ฐํ.
-
ContainerEvent
ContainerListener
componentAdded(ContainerEvent ce)
componentRemoved(ContainerEvent ce)
Component getChild()
: ์ปจํ ์ด๋์ ์ถ๊ฐ/์ญ์ ๋ ์ปดํฌ๋ํธ๋ฅผ ๋ฐํ.Container getContainer()
: ์ด๋ฒคํธ ์์ค๋ฅผ ๋ฐํ.
โ ์ด๋ฒคํธ ๋ฆฌ์ค๋ ์ถ๊ฐ/์ ๊ฑฐ ๋ฉ์๋๋ค
-
์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ์ปดํฌ๋ํธ์ ์ถ๊ฐ/์ ๊ฑฐํ๋ ๋ฉ์๋๋ค์ด๋ค.
-
โก์ด๋ฒคํธ ๊ด๋ จ ์ธํฐํ์ด์ค๋ค ์ ๋ฉ์๋๋ค์ ๋ํ ์ค๋ช ์ ํด๋นํ๋ค!
-
โป ์๋์ฐ = ์ปจํ ์ด๋์ธ Window์ ๊ทธ ์์๋ค์ธ Frame, Dialog, FileDialog๋ฅผ ๋ปํ๋ค.
- ํ์ฑ์๋์ฐ active window : ํ์ฌ ์์ ์ค์ธ ์๋์ฐ = ๊ฐ์ฅ ์์ ๋ํ๋๋ ์๋์ฐ
- ๋นํ์ฑํ deactivated : ์ฌ์ฉ์๊ฐ ๋ค๋ฅธ ์์ ์ ์ํด ๋ค๋ฅธ ์๋์ฐ๋ฅผ ์ ํ์, ์ด์ ์ ์์ ํ๋ ์๋์ฐ๋ ๋นํ์ฑํ๋จ.
-
โป
ActionEvent ae
- ๊ณ ์์ค ์ด๋ฒคํธ๋ก, ์ปดํฌ๋ํธ์ ์ ์๋ ๋์์ด ์ํ๋์์ ๋ ๋ฐ์ํจ.
- ActionEvent๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ
- Button์ด ๋๋ฌ์ก์ ๋(ํด๋ฆญ/์คํ์ด์ค๋ฐ)
- Menu๋ฅผ ํด๋ฆญํ์ ๋
- TextField ์์ Enterํค๋ฅผ ๋๋ ์ ๋
- List์ item ํ๋๋ฅผ ์ ํํ์ฌ ๋๋ธํด๋ฆญํ์ ๋
- ์ด ๋๋ MouseEvent๋ KeyEvent๊ฐ ๋ฐ์ํด๋, ์ต์ข ์ ์ผ๋ก๋ ActionEvent๊ฐ ๋ฐ์ํ ๊ฒ์ผ๋ก ์ฒ๋ฆฌ๋จ.
- ๋ฐ๋ผ์ ActionListener์ actionPerformed(ActionEvent ae)์ ์ด๋ฒคํธ ๋ฐ์์ ์ํํ ์ฝ๋๋ฅผ ์์ฑํด์ผ ํ๋ค.
- ActionEvent์ ์ฅ์ : ๋ฒํผ์ ๋๋ฅด๋ ์ฌ๋ฌ ๋ฐฉ๋ฒ์ด ์กด์ฌํ๋๋ผ๋ ์ต์ข ์ ์ผ๋ก๋ ActionEvent๋ง ๋ฐ์ํ๋ฏ๋ก, ์ด์ ๋ํ ์ฒ๋ฆฌ๋ง ํ๋ฉด ๋๋ค.
-
์๋๋ ๋ฉ์๋์, ๊ฐ ๋ฉ์๋์ ํธ์ถ์๊ธฐ์ด๋ค.
-
actionPeformed(ActonEvent ae)
- Button์ด ๋๋ฌ์ก์ ๋(ํด๋ฆญ/์คํ์ด์ค๋ฐ)
- Menu๋ฅผ ํด๋ฆญํ์ ๋
- TextField ์์ Enterํค๋ฅผ ๋๋ ์ ๋
- List์ item ํ๋๋ฅผ ์ ํํ์ฌ ๋๋ธํด๋ฆญํ์ ๋
-
componentMoved(ActonEvent ae)
-
componentShown(ActonEvent ae)
-
componentHidden(ActonEvent ae)
-
componentResized(ActonEvent ae)
- ๊ฐ๊ฐ ์ปดํฌ๋ํธ๊ฐ ์ด๋๋์์ ๋ / ํ๋ฉด์ ๋ณด์ผ ๋ / ํ๋ฉด์ ๋ณด์ด์ง ์์ ๋ / ํฌ๊ธฐ๊ฐ ๋ณ๊ฒฝ๋์์ ๋.
-
mouseDragged(MouseEvent me)
: ๋ง์ฐ์ค ๋ฒํผ์ ๋๋ฅธ ์ฑ๋ก ๋ง์ฐ์ค๋ฅผ ์์ง์์ ๋ -
mouseMoved(MouseEvent me)
: ๋ง์ฐ์ค ํฌ์ธํฐ๋ฅผ ์ด๋์ํฌ ๋ -
mousePressed(MouseEvent me)
: ๋ง์ฐ์ค ๋ฒํผ์ ๋๋ ์ ๋ -
mouseReleased(MouseEvent me)
: ๋ง์ฐ์ค ๋ฒํผ์ ๋ด์์ ๋ -
mouseEntered(MouseEvent me)
: ๋ง์ฐ์คํฌ์ธํฐ๊ฐ ์ด๋ฒคํธ์์ค ์์ญ ๋ด๋ก ๋ค์ด์์ ๋ -
mouseExited(MouseEvent me)
: ๋ง์ฐ์คํฌ์ธํฐ๊ฐ ์ด๋ฒคํธ์์ค ์์ญ ๋ฐ์ผ๋ก ๋๊ฐ ๋ -
mouseClicked(MouseEvent me)
: ๋ง์ฐ์ค ๋ฒํผ์ ๋๋ ๋ค ๋ผ์์ ๋ -
mouseWheelMoved(MouseWheelEvent e)
: ๋ง์ฐ์ค ํ ์ ์์ง์์ ๋ -
keyPressed(KeyEvent ke)
: ํค๋ณด๋ ํค๋ฅผ ๋๋ ์ ๋ -
keyReleased(KeyEvent ke)
: ํค๋ณด๋ ํค๋ฅผ ๋ผ์์ ๋ -
keyTyped(KeyEvent ke)
: ํค๋ณด๋ ํค๋ฅผ ๋๋ ๋ค ๋ผ์์ ๋ -
textValueChanged(TextEvent te)
: TextField/TextArea์ ๋ด์ฉ์ด ๋ณ๊ฒฝ๋์์ ๋ -
focusGained(FocusEvent fe)
: ์ด๋ฒคํธ ์์ค๋ก focus๊ฐ ์ด๋ํ์ ๋ -
focusLost(FocusEvent fe)
: ์ด๋ฒคํธ ์์ค๊ฐ ๊ฐ๊ณ ์๋ focus๊ฐ ๋ค๋ฅธ ์ปดํฌ๋ํธ๋ก ์ด๋ํ์ ๋ -
itemStateChanged(ItemEvent ie)
: Checkbox, CheckboxItem, List, Choice ์ status๊ฐ ๋ณ๊ฒฝ๋์์ ๋.- (selected <-> unselected ๋ก status๊ฐ ์ ํ๋ ๋)
-
adjustmentValueChanged(AdjustmentEvent ae)
: Scrollbar์ ๊ฐ์ด ๋ณ๊ฒฝ๋์์ ๋ -
windowOpened(WindowEvent we)
: ์๋์ฐ๊ฐ ์ด๋ ธ์ ๋ -
windowClosing(WindowEvent we)
: ์๋์ฐ๊ฐ ๋ซํ ๋(๋ซ๊ธฐ ๋ฒํผ์ ๋๋ ์ ๋) -
windowClosed(WindowEvent we)
: ์๋์ฐ๊ฐ ๋ซํ์ ๋(dispose()๊ฐ ํธ์ถ๋์์ ๋) -
windowIconified(WindowEvent we)
: ์๋์ฐ๊ฐ ์ต์ํ(์์ด์ฝํ)๋์์ ๋ -
windowDeiconified(WindowEvent we)
: ์๋์ฐ๊ฐ ์ต์ํ ์ํ์์ ์๋ ํฌ๊ธฐ๋ก ๋์์์ ๋ -
windowActivated(WindowEvent we)
: ์๋์ฐ๊ฐ ํ์ฑํ ๋์์ ๋ -
windowDeactivated(WindowEvent we)
: ์๋์ฐ๊ฐ ๋นํ์ฑํ ๋์์ ๋ -
windowGainedFocus(WindowEvent e)
: ์๋์ฐ๊ฐ ํฌ์ปค์ค๋ฅผ ์ป์ ๋ -
windowLostFocus(WindowEvent e)
: ์๋์ฐ๊ฐ ํฌ์ปค์ค๋ฅผ ์์์ ๋ -
windowStateChanged(WindowEvent e)
: ์๋์ฐ์ ์ํ๊ฐ ๋ณํ์ ๋ -
componentAdded(ContainerEvent ce)
: ์ปจํ ์ด๋์ ์ปดํฌ๋ํธ๊ฐ ์ถ๊ฐ๋์์ ๋ -
componentRemoved(ContainerEvent ce)
: ์ปจํ ์ด๋์ ์ปดํฌ๋ํธ๊ฐ ์ ๊ฑฐ๋์์ ๋
๊ฐ ์ด๋ฒคํธ์ ์ฃผ์ ๋ฉ์๋
์ด๋ฒคํธ ์ฒ๋ฆฌ ์์ - ๋ซ๊ธฐ ๋ฒํผ ๋์์ํค๊ธฐ
package mission6.event;
import java.awt.*;
import java.awt.event.*;
public class FrameTest3 {
public static void main(String[] args) {
Frame f = new Frame("Login"); // Frame๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค
f.setSize(300, 200); // Frame์ ํฌ๊ธฐ๋ฅผ ์ค์ ํ๋ค
// EventHandlerํด๋์ค์ ๊ฐ์ฒด๋ฅผ ์์ฑํด Frame์ WindowListener๋ก ๋ฑ๋กํ๋ค
f.addWindowListener(new EventHandler());
f.setVisible(true); // Frame .
}
}
// ํด๋์ค EventHandler์์,
// ์ด๋ฏธ ๋ง๋ค์ด์ ธ ์๋ WindowListener๋ผ๋ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ฒ ํจ.
class EventHandler implements WindowListener
{
public void windowOpened(WindowEvent e) {}
// ↓ windowClosing๋ฉ์๋ : Frame์ ๋ซ๊ธฐ ๋ฒํผ์ ๋๋ ์ ๋ ํธ์ถ๋๋ค.
// ๋ฐ๋ผ์ ํด๋น ๋ฉ์๋์ ์ดํ๋ฆฌ์ผ์ด์
์ ์ข
๋ฃํ๋ ์ฝ๋๋ฅผ ์ถ๊ฐํด์ผ ํ๋ค.
public void windowClosing(WindowEvent e) { // ์ฌ์ฉ์๊ฐ ๋ซ๊ธฐ ๋ฒํผ์ ๋๋ฅด๋ ์ด๋ฒคํธ
e.getWindow().setVisible(false); // Frame์ ํ๋ฉด์์ ๋ณด์ด์ง ์๋๋ก ํ๊ณ
e.getWindow().dispose(); // ๋ฉ๋ชจ๋ฆฌ์์ ์ ๊ฑฐํ๋ค
System.exit(0); // ํ๋ก๊ทธ๋จ์ ์ข
๋ฃํ๋ค
// โป ์ด ๋ฉ์๋ ๋ด์์๋ ์ด๋ฒคํธ ๋ฐ์์ ์์ฑ๋ WindowEvent์ธ์คํด์ค์ ์ฐธ์กฐ๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
// ๊ทธ๋์ WindowEvent์ธ์คํด์ค์ ๋ฉ์๋๋ค์ ์ฌ์ฉํ ์ ์๋ค.
}
public void windowClosed(WindowEvent e) {} // ์๋ฌด๋ด์ฉ๋ ์๋ ๋ฉ์๋๋ค ๊ตฌํ
public void windowIconified(WindowEvent e) {}
public void windowDeiconified(WindowEvent e) {}
public void windowActivated(WindowEvent e) {}
public void windowDeactivated(WindowEvent e) {}
}
Adapterํด๋์ค
-
Adapterํด๋์ค
- ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ์ง์ ๊ตฌํํ๋ ๋์ , Adapterํด๋์ค๋ฅผ ์์๋ฐ์ ์ํ๋ ๋ฉ์๋๋ง ์์ฑ(์ค๋ฒ๋ผ์ด๋ฉ)ํ ์ ์๋๋ก ๊ณ ์๋์๋ค.
- ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ์์ฑํ ๋, ํด๋น ์ด๋ฒคํธ ๋ฆฌ์ค๋์ ์ ์๋ ๋ชจ๋ ์ถ์๋ฉ์๋๋ฅผ ๊ตฌํํด์ผ ํ๋ ๋ถํธํจ์ ๊ฐ์ ํ๊ธฐ ์ํด ๊ณ ์๋จ.
-
Adapter๋ฅผ ์์๋ฐ์ผ๋ฉด, ์ด๋ฒคํธ๋ฆฌ์ค๋(์ธํฐํ์ด์ค)์ ๋ชจ๋ ์ถ์๋ฉ์๋๋ฅผ ๊ตฌํํ์ง ์๊ณ ์ํ๋ ๋ฉ์๋๋ง ์์ฑํ๋ฉด ๋๋ค.
- (Adapterํด๋์ค๋ ๊ทธ์ ์ด๋ฒคํธ ๋ฆฌ์ค๋์ ์ ์๋ ๋ชจ๋ ๋ฉ์๋๋ฅผ ์ถ์๋ฉ์๋๋ก(์๋ฌด ๋ด์ฉ ์์ด) ๊ตฌํํด ๋์ ๋ฉ์๋์ผ ๋ฟ์ด๋ค.)
-
๋ฐ๋ผ์ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ์์ฑํ ๋..
- ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ๊ตฌํํ๊ฑฐ๋ :
implements ์ด๋ฒคํธ๋ฆฌ์ค๋
- Adapterํด๋์ค๋ฅผ ์์๋ฐ์ผ๋ฉด ๋๋ค :
extends Adapterํด๋์ค
- (๋์ ์ฐจ์ด๋ ์ฝ๋ ์์ฑ์ ํธ๋ฆฌํจ ์ธ์๋ ์๋ฌด ์ฐจ์ด๊ฐ ์๋ค)
- ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ๊ตฌํํ๊ฑฐ๋ :
Adapterํด๋์ค๋ก ๊ตฌํ๋์ด ์๋ ์ด๋ฒคํธ ๋ฆฌ์ค๋
- ์๋๋ Adapterํด๋์ค๋ก ๊ตฌํ๋์ด ์๋ ์ด๋ฒคํฌ ๋ฆฌ์ค๋์ ๋ชฉ๋ก์ด๋ค.
- (์ข)์ด๋ฒคํธ ๋ฆฌ์ค๋(์ธํฐํ์ด์ค) - (์ฐ)Adapter ํด๋์ค
ComponentListener
-ComponentAdapter
ContainerListener
-ContainerAdapter
FocusListener
-FocusAdapter
KeyListener
-KeyAdapter
MouseListener
-MouseAdapter
MouseMotionListener
-MouseMotionAdapter
WindowListener
-WindowAdapter
์ด๋ฒคํธ ์์ (1) - ๋ก๊ทธ์ธ ๊ตฌํํ๊ธฐ
- ๊ฐ์ฒด์งํฅ์ ์ผ๋ก ์ ๋ฆฌ๋ ์ฝ๋์ ์์.
- Frame์ ์์๋ฐ๋ ํด๋์ค ๊ตฌํ
- Frame์ ํฌํจ๋๋ ์ปดํฌ๋ํธ๋ค์ ์ธ์คํด์ค๋ฉค๋ฒ๋ก ์ ์ธ
- Frame์ ์์ฑ์์์ ์ปดํฌ๋ํธ๋ฅผ ์์ฑ ๋ฐ ์ค์ ํ๊ฒ ํจ
- TextField์ธ tfId, tfPwd์๋ EventHandler์ธ์คํด์ค๋ฅผ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ก ๋ฑ๋กํ ์ด์
- TextField์์ ์ํฐ ํค๋ฅผ ๋๋ฌ๋ ok๋ฒํผ์ ๋๋ฅธ ๊ฒ๊ณผ ๊ฐ๊ฒ ์ฒ๋ฆฌํ๊ธฐ ์ํด.
- ActionEvent์ ๊ฐ์ ๊ณ ์์ค ์ด๋ฒคํธ์ ํ์์ฑ.
- TextField/TextArea/TextComponent์ ๋ฉ์๋๋ค ํ์ฉ
requestFocus()
: ์ํ๋ ์ปดํฌ๋ํธ๊ฐ ํฌ์ปค์ค๋ฅผ ๊ฐ๊ฒ ํ๋ค.selectAll()
: TextField ๋๋ TextArea์ ์ ๋ ฅ๋ text์ ์ฒด๋ฅผ ์ ํ๋ ์ํ๋ก ๋ง๋ ๋คsetEchoChar(char c)
: - ์ค์ ๋ก ์ ๋ ฅ๋ ๊ฐ์ ๊ฐ์ถ๊ธฐ ์ํด ํ๋ฉด์ ๋ณด์ฌ์ง ๋ฌธ์๋ฅผ ์ง์ ํ๋ค
import java.awt.*;
import java.awt.event.*;
public class TextFieldTest2 extends Frame {
// Frameํด๋์ค๋ฅผ ์์๋ฐ๋๋ค(=Frameํด๋์ค์ public/protected ๋ณ์ ๋ฐ ๋ฉ์๋ ์ฌ์ฉ๊ฐ๋ฅ)
Label lid;
Label lpwd;
TextField tfId;
TextField tfPwd;
Button ok;
TextFieldTest2(String title) { // ์์ฑ์
super(title); // Frameํด๋์ค์ ์์ฑ์๋ฅผ ํธ์ถํ๋ค.
lid = new Label("ID :", Label.RIGHT); // Label์ text์ ๋ ฌ์ ์ค๋ฅธ์ชฝ์ผ๋ก
lpwd = new Label("Password :", Label.RIGHT);
// ์ฝ 10๊ฐ์ ๊ธ์๋ฅผ ์
๋ ฅํ ์ ์๋ TextField์์ฑ
tfId = new TextField(10);
tfPwd = new TextField(10);
tfPwd.setEchoChar('*'); // ์
๋ ฅํ ๊ฐ ๋์ '*'์ด ๋ณด์ด๊ฒ ํ๋ค
ok = new Button("OK");
// OK๋ฒํผ๊ณผ TextField์ ์ด๋ฒคํธ์ฒ๋ฆฌ๋ฅผ ์ํ Listener๋ฅผ ์ถ๊ฐํด์ค๋ค
// TextField์ ์ด๋ฒคํธ์ฒ๋ฆฌ๋ฅผ ํ๋ ์ด์ ? ์ํฐํค๋ฅผ ๋๋ ์ ๋๋ ์ฒ๋ฆฌ๋๊ฒ ํ๊ธฐ ์ํด.
tfId.addActionListener(new EventHandler());
tfPwd.addActionListener(new EventHandler());
ok.addActionListener(new EventHandler());
setLayout(new FlowLayout()); // LayoutManager๋ฅผ FlowLayout์ผ๋ก
add(lid); // ์์ฑํ Component๋ค์ Frame์ ํฌํจ์ํจ๋ค
add(tfId);
add(lpwd);
add(tfPwd);
add(ok);
setSize(450, 65);
setVisible(true); // Frame์ด ํ๋ฉด์ ๋ณด์ด๊ฒ ํ๋ค
}
public static void main(String args[]) {
TextFieldTest2 f = new TextFieldTest2("Login");
}
class EventHandler implements ActionListener {
public void actionPerformed(ActionEvent e){
String id = tfId.getText(); // tfId์ ์
๋ ฅ๋์ด์๋ text๋ฅผ ์ป์ด์จ๋ค
String password = tfPwd.getText();
if (!id.equals("javachobo")){
System.out.println("์
๋ ฅํ์ id๊ฐ ์ ํจํ์ง ์์ต๋๋ค. ๋ค์ ์
๋ ฅํด ์ฃผ์ธ์.");
// id๋ฅผ ๋ค์ ์
๋ ฅํ ์ ์๋๋ก, focus๋ฅผ tfId๋ก ์ฎ๊ธด๋ค
tfId.requestFocus();
tfId.selectAll(); // tfId์ ์
๋ ฅ๋ text๊ฐ ์ ํ๋๊ฒ ํ๋ค
} else if (!password.equals("asdf")) {
System.out.println("์
๋ ฅํ์ ๋น๋ฐ๋ฒํธ๊ฐ ํ๋ ธ์ต๋๋ค. ๋ค์ ์
๋ ฅํด ์ฃผ์ธ์.");
// pwd๋ฅผ ๋ค์ ์
๋ ฅํ ์ ์๋๋ก focus๋ฅผ tfPwd๋ก ์ฎ๊ธด๋ค
tfPwd.requestFocus();
tfPwd.selectAll();
} else {
System.out.println( id + "๋, ์ฑ๊ณต์ ์ผ๋ก ๋ก๊ทธ์ธ ๋์์ต๋๋ค.");
}
}
} // class EventHandler
}
์ด๋ฒคํธ ์์ (2) - ๋ง์ฐ์คํฌ์ธํฐ ์ขํ ์ฐ๊ธฐ
- Frame ์์์ ๋ง์ฐ์ค ํฌ์ธํฐ๋ฅผ ์์ง์ด๋ฉด ํ๋ฉด์ ํฌ์ธํฐ์ ์ขํ๊ฐ ๋ํ๋๋ค.
- ์๋ฆฌ
- Frame์์์ ๋ง์ฐ์คํฌ์ธํฐ๋ฅผ ์์ง์ด๋ฉด MouseEvent๊ฐ ๋ฐ์ํ๊ณ mouseMoved๋ฉ์๋๊ฐ ํธ์ถ๋จ.
- MouseEvent์๋
getX()
์getY()
๋ฉ์๋๊ฐ ์์ด ์ด ๋ฉ์๋๋ค์ ํ์ฉํด ๋ง์ฐ์คํฌ์ธํฐ์ ์ขํ๋ฅผ ์ ์ ์๋ค.
- ์ด๋ฒคํธ ์์ค : Frame
- ์ด๋ฒคํธ ๋ฆฌ์ค๋ : MouseMotionListener
- ์ด๋ฒคํธ ํธ๋ค๋ฌ : EventHandler ํด๋์ค
import java.awt.*;
import java.awt.event.*;
public class MouseEventTest extends Frame{ // Frameํด๋์ค ์์๋ฐ๊ธฐ
Label location;
MouseEventTest (String title) { // ์์ฑ์
super(title); // ๋ถ๋ชจ ํด๋์ค์ธ Frame(String title)ํธ์ถ
location = new Label("Mouse Pointer Location : ");
location.setSize(195,15);
location.setLocation(5,30);
location.setBackground(Color.yellow);
add(location);
//EventHandler์ ์ธ์คํด์ค๋ฅผ Frame์ Listener๋ก ๋ฑ๋ก.
// ๋ง์ฐ์ค ๋ชจ์
์ด๋ฒคํธ ๋ฐ์์ addMouseMotionListener๊ฐ ๊ฐ์งํ๊ณ , EventHandler๊ฐ ์ด๋ฒคํธ ์ฒ๋ฆฌ.
addMouseMotionListener(new EventHandler());
setSize(300,200);
setLayout(null);
setVisible(true);
}
public static void main(String[] args) {
MouseEventTest mainWin = new MouseEventTest("MouseEventTest");
}
class EventHandler implements MouseMotionListener {
public void mouseDragged(MouseEvent e) {}
public void mouseMoved(MouseEvent e) {
// .setText() Label ๋ด ํ
์คํธ๋ฅผ ()๋ก ๋ฐ๊พธ๊ธฐ
location.setText("Mouse Pointer Location : (" + e.getX()
+ "," + e.getY() + ")");
}
} // EventHandler
}
์ด๋ฒคํธ ์์ (3) - .getSource(), ItemListener ํ์ฉ
-
Checkbox(radio button) ์ค ํ๋๋ฅผ ํด๋ฆญํ๋ฉด Frame์ ๋ฐฐ๊ฒฝ์์ด ๋ณ๊ฒฝ๋๋ค.
-
์๋ฆฌ
- Checkbox๋ฅผ ํด๋ฆญํ๋ฉด ItemEvent๊ฐ ๋ฐ์ํ๋ค.
- itemStateChanged๋ฉ์๋๊ฐ ํธ์ถ๋๋ค.
- (itemStateChanged๋ Checkbox, CheckboxItem, List, Choice ์ status๊ฐ ๋ณ๊ฒฝ๋์์ ๋ ํธ์ถ๋๋ค.
- (selected <-> unselected ๋ก status๊ฐ ์ ํ๋ ๋)
- (itemStateChanged๋ Checkbox, CheckboxItem, List, Choice ์ status๊ฐ ๋ณ๊ฒฝ๋์์ ๋ ํธ์ถ๋๋ค.
- ์ด ๋ itemStateChanged๋ฉ์๋ ๋ด์์ getSource()๋ฅผ ํธ์ถํ๋ฉด ์ด๋ฒคํธ ์์ค(ํด๋ฆญํ Checkbox)๋ฅผ ์ป์ ์ ์๋ค.
- getSource()๋ก ์ป์ ์ด๋ฒคํธ ์์ค์์ getLabel()๋ก Label์ ์ป๋๋ค.
- if๋ฌธ์ผ๋ก ์ด๋ค ์ฒดํฌ๋ฐ์ค์ ์ฒดํฌํ๋์ง ํ์ธํ ๋ค, ๊ฐ ์ฒดํฌ๋ฐ์ค Label์ ๋ง๋ ๋ฐฐ๊ฒฝ์์ ๋ํ๋ธ๋ค.
-
์ด๋ฒคํธ ์์ค : ํด๋ฆญํ Checkbox
-
์ด๋ฒคํธ ๋ฆฌ์ค๋ : ItemListener
-
์ด๋ฒคํธ ํธ๋ค๋ฌ : EventHandlerํด๋์ค (implements ItemListener)
import java.awt.*;
import java.awt.event.*;
public class CheckboxEventTest2 extends Frame { // Frameํด๋์ค ์์๋ฐ์์ค๊ธฐ
CheckboxGroup group;
Checkbox cb1;
Checkbox cb2;
Checkbox cb3;
CheckboxEventTest2 (String title) { // ์์ฑ์
super(title); // ๋ถ๋ชจ ํด๋์ค์ธ Frame์ ์์ฑ์ ํธ์ถ
group = new CheckboxGroup();
cb1 = new Checkbox("red", group, true); // ๊ธฐ๋ณธ ์ฒดํฌ ์ํ
cb2 = new Checkbox("green", group, false);
cb3 = new Checkbox("blue", group, false);
cb1.addItemListener(new EventHandler());
cb2.addItemListener(new EventHandler());
cb3.addItemListener(new EventHandler());
setLayout(new FlowLayout());
add(cb1);
add(cb2);
add(cb3);
setBackground(Color.red);
setSize(300,200);
setVisible(true);
}
public static void main(String[] args) {
CheckboxEventTest2 mainWin = new CheckboxEventTest2("CheckboxEventTest2");
}
class EventHandler implements ItemListener {
public void itemStateChanged(ItemEvent e) {
Checkbox cb = (Checkbox)e.getSource();
String color = cb.getLabel();
System.out.println(color); // ์ ์ฐํ๋์ง ํ์ธ์ฉ.
if(color.equals("red")) {
setBackground(Color.red);
} else if (color.equals("green")) {
setBackground(Color.green);
} else {
setBackground(Color.blue);
}
}
}
}
์ด๋ฒคํธ ์์ (4) - ๊ฐ๋จ ๋ฉ๋ชจ์ฅ(ํ์ผ ํธ์ง๊ธฐ) ๋ง๋ค๊ธฐ (FileDialog, Menu, TextArea)
-
ํ์ผ ์ฝ๊ธฐ, ์ฐ๊ธฐ, ์ ์ฅ์ด ๊ฐ๋ฅํ ๋ฉ๋ชจ์ฅ ๋ง๋ค๊ธฐ
- fileOpen(), saveAs()๋ฉ์๋ ๋ด์ฉ๋ค์ ๋์ค์ ๋ฐ๋ก ๊ณต๋ถํด ์ดํดํ๊ธฐ.
- java.io.*; ํจํค์ง์ FileReader, BufferedReader, StringWriter / FileWriter, BuffredWriter
-
๋ฉ๋ด ๊ตฌ์ฑํ๊ธฐ (MenuBar, Menu, MenuItem)
-
TextEditor ์์ฑ์
- Frame์ MenuComponent๋ค๊ณผ TextArea ๊ตฌ์ฑ
- ๋ฉ๋ด ๊ฐ ๊ธฐ๋ฅ์ EventHandler(ActionListener) ๋ฑ๋ก
- ActionListener๊ฐ ํธ์ถ๋๋ ๊ฒฝ์ฐ -(2) Menu๋ฅผ ํด๋ฆญํ์ ๋ ์ ํด๋นํ๋ฏ๋ก ๋ชจ๋ ActionEvent์ ํด๋น.
-
MyHandler ํด๋์ค : ์ด๋ฒคํธ ์ฒ๋ฆฌ
- New -
.setText("")
๊ณต๋ฐฑ ์ถ๋ ฅ - Open - FileDialog ํตํด ํ์ผ์ ์ ํํ ๋ค, fileOpen() ๋ฉ์๋ ํธ์ถํด ํ๋ฉด์ ๋ณด์ฌ์ค.
- Save As.. - FileDialog ํตํด ํ์ฌ ์์ฑ๋ ๋ด์ฉ์ ์ ํํ ๋ค saveAs() ๋ฉ์๋ ํธ์ถํด ํ์ผ๋ก ์ ์ฅํจ.
- Exit -
System.exit(0);
์ผ๋ก ํ๋ก๊ทธ๋จ ์ข ๋ฃ
- New -
import java.awt.*;
import java.awt.event.*;
import java.io.*; // ํ์ผIO ํจํค์ง?
public class TextEditor extends Frame { // Frameํด๋์ค ์์๋ฐ์์ค๊ธฐ
String fileName;
TextArea content;
MenuBar mb;
Menu mFile;
MenuItem miNew, miOpen, miSaveAs, miExit;
TextEditor (String title) {
super(title); // ๋ถ๋ชจํด๋์ค Frame์ ์์ฑ์ ํธ์ถ
content = new TextArea();
add(content);
mb = new MenuBar();
mFile = new Menu("File");
miNew = new MenuItem("New");
miOpen = new MenuItem("Open");
miSaveAs = new MenuItem("Save As...");
miExit = new MenuItem("Exit");
mFile.add(miNew); // Menu์ MenuItem๋ค ์ถ๊ฐ
mFile.add(miOpen);
mFile.add(miSaveAs);
mFile.addSeparator(); // ๋ฉ๋ด ๋ถ๋ฆฌ์ (separator) ์ถ๊ฐ
mFile.add(miExit);
mb.add(mFile); // MenuBar์ Menu ์ถ๊ฐ
setMenuBar(mb); // (setMenuBar๋ฉ์๋๋ฅผ ํตํด) Frame์ MenuBar ์ถ๊ฐ
// ๋ฉ๋ด์ ์ด๋ฒคํธํธ๋ค๋ฌ ๋ฑ๋ก
MyHandler handler = new MyHandler();
miNew.addActionListener(handler);
miOpen.addActionListener(handler);
miSaveAs.addActionListener(handler);
miExit.addActionListener(handler);
setSize(300,200);
setVisible(true);
}
// ์ ํ๋ ํ์ผ ๋ด์ฉ์ ์ฝ์ด์ TextArea์ ๋ณด์ฌ์ฃผ๋ ๋ฉ์๋
void fileOpen(String fileName) {
// java.io.*;์ ํด๋์ค๋ค
FileReader fr;
BufferedReader br;
StringWriter sw;
try {
fr = new FileReader(fileName);
br = new BufferedReader(fr);
sw = new StringWriter();
int ch = 0;
while ((ch=br.read()) != -1) {
sw.write(ch);
}
br.close();
content.setText(sw.toString()); // TextArea์ ๋ถ๋ฌ์จ ๋ด์ฉ์ ์ ์ด์ค๋ค
} catch (IOException e) {
e.printStackTrace();
}
} // fileOpen()
// TextArea์ ๋ด์ฉ์ ์ง์ ๋ ํ์ผ์ ์ ์ฅํ๋ ๋ฉ์๋
void saveAs(String fileName) {
FileWriter fw;
BufferedWriter bw;
try {
fw = new FileWriter(fileName);
bw= new BufferedWriter(fw);
bw.write(content.getText()); // TextArea ์ ๋ด์ฉ์ ํ์ผ์ ์ ์ฅํ๋ค.
bw.close();
} catch (IOException e) {
e.printStackTrace();
} // try
} // saveAs๋ฉ์๋์ ๋
public static void main(String args[]) {
TextEditor mainWin = new TextEditor("Text Editor");
} // main๋ฉ์๋์ ๋
// ์ด๋ฒคํธ ์ฒ๋ฆฌ : ๋ฉ๋ด ํด๋ฆญํ์ ๋ ๋ฉ๋ด๋ณ ์ฒ๋ฆฌ์ฝ๋
class MyHandler implements ActionListener {
public void actionPerformed(ActionEvent e) {
String command = e.getActionCommand(); // ActionEvent์์ ๋ฐ์ํ ๋ช
๋ น ๋ฐ์์ค๊ธฐ?
if (command.equals("New")) {
content.setText(""); // ๊ณต๋ฐฑ ์ถ๋ ฅ (๋น ํ์ด์ง)
} else if(command.equals("Open")) {
FileDialog fileOpen =
new FileDialog(TextEditor.this, "ํ์ผ์ด๊ธฐ");
fileOpen.setVisible(true);
fileName = fileOpen.getDirectory() + fileOpen.getFile();
System.out.println(fileName);
// fileOpen() ๋ฉ์๋ ํธ์ถ - ์ ํ๋ ํ์ผ์ ๋ด์ฉ์ TextArea์ ๋ณด์ฌ์ค๋ค
fileOpen(fileName);
} else if(command.equals("Save As...")) {
FileDialog fileSave =
new FileDialog(TextEditor.this,"ํ์ผ์ ์ฅ ",FileDialog.SAVE);
fileSave.setVisible(true);
fileName = fileSave.getDirectory() + fileSave.getFile();
System.out.println(fileName);
// saveAs() ๋ฉ์๋ ํธ์ถ - ํ์ฌ TextArea์ ๋ด์ฉ์ ์ ํ๋ ํ์ผ์ ์ ์ฅํ๋ค
saveAs(fileName);
} else if(command.equals("Exit")) {
System.exit(0); // ํ๋ก๊ทธ๋จ ์ข
๋ฃ.
}
}
} // class MyHandler
} // class TextEditor
AWT์ ๊ทธ๋ํฝ - AWT๋ก ๊ทธ๋ฆผ ๊ทธ๋ฆฌ๊ธฐ
- ์ด์ AWT์์ ์ ๊ณผ ๋ํ์ด ์ด๋ป๊ฒ, ์ด๋ค ๊ณผ์ ์ผ๋ก ๊ทธ๋ ค์ง๋์ง ๋ฐฐ์๋ณผ ๊ฒ์ด๋ค.
- ์๋ฐ๋ฅผ ์ด์ฉํด์ ์ด๋ฏธ์ง ์ฒ๋ฆฌ, ๊ฒ์ ๋ฑ ๋์ ์์ค์ ๊ทธ๋ํฝ๊ธฐ๋ฅ์ด ํ์ํ ์ดํ๋ฆฌ์ผ์ด์
์ ๋ง๋๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค.
- ์๋ฐ์ ๊ทธ๋ํฝ์ฒ๋ฆฌ API - Java2D. JDK API์ ์ผ๋ถ๋ก java.awtํจํค์ง์ ํฌํจ๋์ด ์๋ค
- AWT๋ ์๋ฐ ์ด๊ธฐ์ GUIํ๋ก๊ทธ๋๋ฐ ๋๊ตฌ๋ก, JDK๋ฒ์ ์ด ๋์์ง๋ฉฐ ๋ ๋์ ๊ธฐ๋ฅ์ API์ธ Swing, Java2D, ์ต๊ทผ์ JavaFX๊น์ง ๊ฐ๋ฐ๋์๋ค.
- ๊ทธ๋ผ์๋ AWT๊ฐ Swing๊ณผ Java2D์ ๋ฟ๋ฆฌ์ด๊ธฐ ๋๋ฌธ์, AWT๋ฅผ ํตํด ์๋ฐ GUIํ๋ก๊ทธ๋๋ฐ์ ๋ฐฐ์ฐ๋ ๊ฒ์ด ์ข๋ค.
paint()์ Graphics
-
paint() : ์ปดํฌ๋ํธ์ ๊ทธ๋ฆผ์ ๊ทธ๋ฆฌ๊ธฐ ์ํ ๋ฉ์๋.
- Componentํด๋์ค์ ์ ์๋์ด ์์ด, ๋ชจ๋ ์ปดํฌ๋ํธ์์ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
- Frame, Canvas, Panel ๋ฑ ๊ทธ๋ฆผ์ ๊ทธ๋ฆฌ๋ ค๋ ์ปดํฌ๋ํธ์ paint()๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉ ํ๋ฉด ๋๋ค.
-
paint() ์ ์ธ
public void paint (Graphics g) { ... }
- Graphics๋ฅผ ๋งค๊ฐ๋ณ์๋ก ์ ์ํจ.
- paint()๋ฅผ ์์ฑํ๋ฉด Graphics๊ฐ ๊ฐ์ง ๋ค์ํ ๊ทธ๋ํฝ ๋ฉ์๋๋ฅผ ์ด์ฉํด ๊ทธ๋ฆผ์ ๊ทธ๋ฆฐ๋ค.
-
Graphics
- ๋ชจ๋ ์ปดํฌ๋ํธ๋ Graphics ๊ฐ์ฒด๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
- Graphics๊ฐ์ฒด์๋ ๊ฐ ์ปดํฌ๋ํธ์ ๊ทธ๋ํฝ ๊ด๋ จ์ ๋ณด๊ฐ ๋ด๊ฒจ์ ธ ์๋ค.
- ๋ฐ๋ผ์ ์ปดํฌ๋ํธ์ ๊ทธ๋ฆผ์ ๊ทธ๋ฆฌ๋ ค๋ฉด..
getGraphics()
๋ฅผ ํธ์ถํด ์ปดํฌ๋ํธ์ Graphics๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ๋ฅผ ์ป์ด๋ธ๋ค- Graphics๊ฐ์ฒด๊ฐ ๊ฐ์ง ๋ค์ํ ๊ทธ๋ํฝ ๋ฉ์๋๋ฅผ ์ด์ฉํด ๊ทธ๋ฆผ์ ๊ทธ๋ฆฐ๋ค.
- Graphics๊ฐ์ฒด = ์ถ์ํด๋์ค์ธ Graphics๋ฅผ ์์ ํ ๊ตฌํํ ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ๋งํจ.
Graphics๊ฐ ์ ๊ณตํ๋ ์ฃผ์ ๋ฉ์๋
- ๋ฌธ์์ถ๋ ฅ ๊ด๋ จ ๋ฉ์๋
- ๋ฌธ์์ด์ ์ถ๋ ฅํ ์ ์์ผ๋ฉฐ, ์ถ๋ ฅํ ๋ฌธ์์ด์ font๋ฅผ ์ง์ ํ ์ ์๋ค.
void drawString(String str, int x, int y)
: x, y ์์น์ ๋ฌธ์์ด์ ์ถ๋ ฅํ๋ค.Font getFont()
: ํ์ฌ ์ค์ ๋์ด ์๋ Font๋ฅผ ์ป๋๋ค.void setFont(Font font)
: ์ถ๋ ฅํ ๋ฌธ์์ด์ ํฐํธ๋ฅผ ์ง์ ํ๋ค.FontMetrics getFontMetrics()
: FontMetrics๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ค.- FontMetrics๊ฐ์ฒด๋ ์ง์ ๋ ํฐํธ์ ๋ํ ์์ธํ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ค.
- ์ ๊ด๋ จ ๋ฉ์๋
- ์ถ๋ ฅํ ๊ทธ๋ฆผ์ ์์ ์ง์ ํ๊ฑฐ๋, ์ง์ ๋ ์์ ์ ๋ณด๋ฅผ ์ป์ ์ ์๋ค.
Color getColor()
: ํ์ฌ ์ค์ ๋์ด ์๋ Color๋ฅผ ์ป๋๋ค.void setColor(Color c)
: ์ถ๋ ฅํ ์์ ์ง์ ํ๋ค.
- ๋ํ ๊ด๋ จ ๋ฉ์๋
- ๋ค์ํ ๋ํ์ ๊ทธ๋ฆฌ๋ ๋ฉ์๋.
draw~()
: ๋ํ์ ์ ๋ง ๊ทธ๋ฆฐ๋ค.fill~()
: ๋ํ ๋ด๋ถ๋ฅผ ์ ์ ์์ผ๋ก ์ฑ์ด๋ค.- ์ (line)์ ๊ทธ๋ฆฌ๋ ๋ฉ์๋
void drawLine(int x1, int y1, int x2, int y2)
- ํ์(oval)์ ๊ทธ๋ฆฌ๋ ๋ฉ์๋
void drawOval(int x, int y, int width, int height)
void fillOval(int x, int y, int width, int height)
- ์ฌ๊ฐํ(rectangle)์ ๊ทธ๋ฆฌ๋ ๋ฉ์๋
void drawRect(int x, int y, int width, int height)
void fillRect(int x, int y, int width, int height)
- ๋ฅ๊ทผ ์ฌ๊ฐํ(roundrectangle)์ ๊ทธ๋ฆฌ๋ ๋ฉ์๋
void drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight)
void fillRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight)
- ์
์ฒด ์ฌ๊ฐํ(3Drectangle)์ ๊ทธ๋ฆฌ๋ ๋ฉ์๋
void draw3DRect(int x, int y, int width, int height, boolean raised)
void fill3DRect(int x, int y, int width, int height, boolean raised)
- ํธ(arc, ๋ถ์ฑ๊ผด)๋ฅผ ๊ทธ๋ฆฌ๋ ๋ฉ์๋
void drawArc(int x, int y, int width, int height, int startAngle, int arcAngle)
void fillArc(int x, int y, int width, int height, int startAngle, int arcAngle)
startAngle
: ๋ถ์ฑ๊ผด์ ๊ทธ๋ฆฌ๊ธฐ ์์ํ๋ ๊ฐ๋arcAngle
: ๋ถ์ฑ๊ผด์ ํํํ๋ ๊ฐ๋
- ๋ค๊ฐํ(polygon)์ ๊ทธ๋ฆฌ๋ ๋ฉ์๋
void drawPolygon(int[] xPoints, int[] yPoints, int nPoints)
void fillPolygon(int[] xPoints, int[] yPoints, int nPoints)
void drawPolyline(int[] xPoints, int[] yPoints, int nPoints)
int[] xPoints
: ์ ๋ค์ x์ขํ ๋ชจ์ ๋ฐฐ์ดint[] yPoints
: ์ ๋ค์ y์ขํ ๋ชจ์ ๋ฐฐ์ดint nPoints
: ์ ๋ค์ ๊ฐฏ์
- ๊ธฐํ ๋ฉ์๋
void clearRect(int x, int y, int width, int height)
: ์ง์ ๋ ์์ญ์ ์ง์ด๋ค.boolean drawImage(Image img, int x, int y, ImageObserver observer)
: x,y์ ์์น์ ์ด๋ฏธ์ง๋ฅผ ๊ทธ๋ฆฐ๋ค.
Graphics๋ฉ์๋๋ก ๋ํ ๊ทธ๋ฆฌ๊ธฐ
- ์ , ์, ๋ฅ๊ทผ ์ฌ๊ฐํ, ๋ค๊ฐํ, ํธ ๊ทธ๋ฆฌ๊ธฐ
import java.awt.*;
import java.awt.event.*;
public class GraphicsEx1 extends Frame{ // Frameํด๋์ค๋ฅผ ์์๋ฐ์
public static void main(String[] args) {
new GraphicsEx1("GraphicsEx1");
}
public GraphicsEx1 (String title) { // ์์ฑ์
super(title); // Frame์ ์์ฑ์ ํธ์ถ
addWindowListener(new WindowAdapter() {
// ์ฐฝ๋ซ๊ธฐ ๋ฒํผ ๊ตฌํ
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
setBounds(100, 100, 400, 300);
setVisible(true);
}
public void paint (Graphics g) {
g.setFont(new Font("Serif", Font.PLAIN, 15));
g.drawString("Graphics๋ฅผ ์ด์ฉํด ๊ทธ๋ฆผ์ ๊ทธ๋ฆฝ๋๋ค.", 10, 50);
// ์ ๊ทธ๋ฆฌ๊ธฐ
g.drawOval(50,100, 50,50); // ์ผ๋ฐ ์
// ํ๋์ ์ ๊ทธ๋ฆฌ๊ธฐ
g.setColor(Color.BLUE);//( ์ ์ค์ -> ๊ทธ๋ฆฌ๊ธฐ : ๊ทธ ์๊น๋ก ๊ทธ๋ ค์ง )
g.fillOval(100,100, 50,50); // ํ๋์ ์
// ์ ๊ทธ๋ฆฌ๊ธฐ
g.setColor(Color.red);
g.drawLine(100,100, 150,150);
// ๋ฅ๊ทผ ์ฌ๊ฐํ ๊ทธ๋ฆฌ๊ธฐ
g.fillRoundRect(200, 100, 120, 80, 30, 30);
// ๋ค๊ฐํ ๊ทธ๋ฆฌ๊ธฐ
g.setColor(Color.orange);
g.fillPolygon(new int[]{50, 100, 150, 200}, new int[]{250, 200, 200, 250}, 4);
// ํธ ๊ทธ๋ฆฌ๊ธฐ
g.setColor(Color.cyan);
g.fillArc(250, 200, 100, 100, 0, 120);
// startAngle : ๋ถ์ฑ๊ผด์ ๊ทธ๋ฆฌ๊ธฐ ์์ํ๋ ๊ฐ๋
// arcAngle : ๋ถ์ฑ๊ผด์ ํํํ ๊ฐ๋
}
}
AWT์ฐ๋ ๋์ repaint()
โ
paint()
๋ฅผ ํธ์ถํ ์ ์ด ์๋๋ฐ ์ด๋ป๊ฒ ๊ทธ๋ฆผ์ด ๊ทธ๋ ค์ก์๊น?
โpaint()
๋ ์ง์ ํธ์ถํ์ง ์์๋, AWT์ฐ๋ ๋์ ์ํด ์๋์ผ๋ก ํธ์ถ๋๋ ๋ฉ์๋์ด๊ธฐ ๋๋ฌธ์ด๋ค.
- AWT์ฐ๋ ๋
- GUI์ดํ๋ฆฌ์ผ์ด์ ์ ์คํํ๋ฉด ์๋์ผ๋ก ์์ฑ๋๋ ๋ฐ๋ชฌ ์ฐ๋ ๋์ด๋ค.
- ํ์์๋ ๋๊ธฐ์ํ์ ์๋ค.
- ํ๋ฉด์ด ๊ฐฑ์ ๋์ด์ผ ํ ๋๊ฐ ๋๋ฉด,
paint()
๋๋update()
๋ฅผ ํธ์ถํ์ฌ ํ๋ฉด์ ๋ค์ ๊ทธ๋ฆฐ๋ค.- (AWT์ฐ๋ ๋์ ์ํด) ์๋์ผ๋ก ํ๋ฉด์ด ๊ฐฑ์ ๋๋ ์ํฉ
- ์ฒ์ ํ๋ฉด์ ๋ํ๋ ๋
- ๋ค๋ฅธ ํ๋ฉด์ ๊ฐ๋ ค์ ธ ์๋ ๋ถ๋ถ์ด ๋ค์ ํ๋ฉด์ ๋ํ๋ ๋
- ์์ด์ฝํ(์ต์ํ) ๋์ด ์๋ค๊ฐ, ์๋ ํฌ๊ธฐ๋ก ํ๋ฉด์ ๋ํ๋ ๋
- (AWT์ฐ๋ ๋์ ์ํด) ์๋์ผ๋ก ํ๋ฉด์ด ๊ฐฑ์ ๋๋ ์ํฉ
- ์์ ์ํฉ ์ธ์๋ ํ๋ฉด์ ๊ฐฑ์ ํ๋ ค๋ฉด
repaint()
๋ฅผ ํธ์ถํ๋ฉด ๋๋ค.repaint()
->update(Graphics g)
->paint(Graphics g)
repaint()
๋ AWT์ฐ๋ ๋์๊ฒ ํ๋ฉด์ ๊ฐฑ์ ํ ๊ฒ์ ์์ฒญํ๊ณ ,- AWT์ฐ๋ ๋๋ 0.1์ด๋ง๋ค ํ์ธํด ์์ฒญ์ด ์์ผ๋ฉด
update()
๋ฅผ ํธ์ถํ๊ณ , update()
๋ ํ๋ฉด์ ์ง์ด ๋คpaint()
๋ฅผ ํธ์ถํ๋ค.
repaint() ์์ - ๋ง์ฐ์ค ํฌ์ธํฐ ์์น์ * ์ถ๋ ฅํ๊ธฐ
-
Frame ๋ด์ ๋ง์ฐ์ค ํฌ์ธํฐ์ ์์น์ "*"์ ์ถ๋ ฅํ๋ ์์ .
-
Frame์์ญ ๋ด์์ ๋ง์ฐ์คํฌ์ธํฐ๋ฅผ ์์ง์ด๋ฉด "*"๋ ๋ฐ๋ผ ์์ง์ธ๋ค.
repaint()
๋ฅผ ์ด์ฉํด, ๋ง์ฐ์คํฌ์ธํฐ๊ฐ ์์ง์ผ ๋๋ง๋ค xy์ขํ๋ฅผ ๋ฐ์ "*" ์๋ก ๊ทธ๋ฆฌ๋ ๊ฒ์ด๋ค.
-
์๋ฆฌ
- ๋ง์ฐ์ค๋ฅผ ์์ง์ด๋ฉด MouseEvent๊ฐ ๋ฐ์ํ๊ณ , EventHandler์ mouseMoved()๊ฐ ํธ์ถ๋๋ค.
- MouseEvent์ getX(), getY()๋ฅผ ํตํด ํ์ฌ ๋ง์ฐ์คํฌ์ธํฐ์ ์์น๋ฅผ ์ป์ด ์ธ์คํด์ค๋ณ์ x,y์ ์ ์ฅํ๋ค.
repaint()
๋ฅผ ํตํด AWT์ฐ๋ ๋์๊ฒ Frame์ ํ๋ฉด์ ๊ฐฑ์ ํ๋๋ก ์์ฒญํ๋ค.- AWT์ฐ๋ ๋๋ 0.1์ด๋ง๋ค ํ์ธํด ์์ฒญ์ด ์์ผ๋ฉด
update()
๋ฅผ ํธ์ถํด ํ๋ฉด์ ์ง์ฐ๊ณ ,paint()
๋ก "*"๋ฅผ ์๋ก ๊ทธ๋ฆฐ๋ค.
-
๋ง์ฝ
repaint()
๊ฐ ์์ผ๋ฉด ๋ง์ฐ์ค๋ฅผ ์์ง์ฌ๋ "*"์ด ์ด๋ํ์ง ์๋๋ค!
import java.awt.*;
import java.awt.event.*;
public class GraphicsEx2 extends Frame implements MouseMotionListener {
// Frameํด๋์ค ์์๋ฐ๊ณ MouseMotionListener๊ตฌํ.
int x = 0;
int y = 0;
public static void main(String[] args) {
new GraphicsEx2("GraphicsEx2");
}
public GraphicsEx2(String title) { // ์์ฑ์
super(title); // ๋ถ๋ชจํด๋์ค Frame์ ์์ฑ์ ํธ์ถ
addMouseMotionListener(this);//GraphicsEx2 ๊ฐ์ฒด์ MouseMotionListener ์ฐ๊ฒฐ
addWindowListener(new WindowAdapter() { // ์ข
๋ฃ๊ธฐ๋ฅ - Adapterํด๋์ค ํ์ฉ
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
setBounds(100, 100, 500, 500);
setVisible(true);
}
public void paint(Graphics g) {
g.drawString("๋ง์ฐ์ค๋ฅผ ์์ง์ฌ๋ณด์ธ์.", 10, 50);
g.drawString("*", x, y);
}
// MouseMotionListener ์ด๋ฒคํธ์ฒ๋ฆฌ ๋ฉ์๋
public void mouseMoved(MouseEvent me) {
x = me.getX(); // MouseEvent์ getX()๋ฉ์๋๋ฅผ ์ด์ฉํด ํ์ฌ ๋ง์ฐ์คํฌ์ธํฐ์ x์ขํ๋ฅผ ์ป์ด์ด
y = me.getY(); // MouseEvent์ getY()๋ฉ์๋๋ฅผ ์ด์ฉํด ํ์ฌ ๋ง์ฐ์คํฌ์ธํฐ์ y์ขํ๋ฅผ ์ป์ด์ด
repaint(); // ๋ง์ฐ์ค ์์ง์ผ ๋๋ง๋ค x,y์ขํ์ "*"๊ฐ ์๋๋ก ์๋ก ๊ทธ๋ฆฌ๊ธฐ.
}
public void mouseDragged(MouseEvent me){}
}
- โป ์์ ์์ค์ฝ๋์ ์๋ ์ฝ๋๋ธ๋ญ์ ์ถ๊ฐํ๋ฉด ๋ง์ฐ์คํฌ์ธํฐ์ ์์ทจ๊ฐ ๋จ๊ฒ ๋๋ค.
update()
๋ ์๋ ์ปดํฌ๋ํธ์์ญ์ ์ง์ฐ๊ณ (๋ฐฐ๊ฒฝ์์ผ๋ก ์ฑ์ฐ๊ณ ) paint()๋ฅผ ํธ์ถํ๋๋ฐ,- ์๋ ์ฝ๋๋ธ๋ญ์ผ๋ก
update()
๋ฅผ ์ฌ์ ์ํด ์ปดํฌ๋ํธ์์ญ์ ์ง์ฐ์ง ์๊ณ paint()๋ง ํธ์ถํ๋๋ก ์ค๋ฒ๋ผ์ด๋ฉํ๊ธฐ ๋๋ฌธ.
/*
public void update(Graphics g){
paint(g);
}
*/
Image๋ฅผ ์ด์ฉํด์ ์ด๋ฏธ์ง ์ถ๋ ฅํ๊ธฐ
-
Image ํด๋์ค
- gif, jpg์ ๊ฐ์ ํ์์ ์ด๋ฏธ์ง ํ์ผ์ ๋ณด์ฌ์ฃผ๊ฑฐ๋ ๊ฐ์ํ๋ฉด(off-screen)์ ์์ฑํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
-
GUIํ๋ก๊ทธ๋จ์์ ์ด๋ฏธ์ง ํ์ผ์ ๋ณด์ฌ์ฃผ๋ ค๋ฉด
Toolkit
,.getImage(File img)
,.drawImage()
๋ฑ์ ํ์ฉํ๋ค.drawImage(Image img, int x, int y, ImageObserver obj)
- Graphics๊ฐ ์ ๊ณตํ๋ ๋ฉ์๋๋ก, ์ด๋ฏธ์ง(img)๋ฅผ ์ง์ ๋ ์์น(x,y)์ ์ถ๋ ฅํ๋ค.
ImageObserver obj
- ์ด๋ฏธ์ง๊ฐ ๋ก๋ฉ๋๋ ๋ฐ ์๊ฐ์ด ๊ฑธ๋ฆฌ๊ธฐ ๋๋ฌธ์, ๋ก๋ฉ์ด ์งํ๋๋ ์ํ์ ๋ฐ๋ผ ํ๋ฉด์ ๋ค์ ๊ทธ๋ ค์ค์ผ ํ๋ค.
- "์ด๋ฏธ์ง๊ฐ ๋ก๋ฉ๋๊ณ ์๋ ์ํ๋ฅผ ์๋ ค์ค ๋์"์
ImageObserver
๋ก ์ง์ ํ๋ค. - ๋ณดํต์ ์ปดํฌ๋ํธ ์์ (
this
)์ImageObserver
๋ก ์ง์ ํ๋ค.- ์? ๋ชจ๋ AWT์ปดํฌ๋ํธ๋
ImageObserver
์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ธฐ ๋๋ฌธ์ด๋ค.
- ์? ๋ชจ๋ AWT์ปดํฌ๋ํธ๋
-
GUIํ๋ก๊ทธ๋จ์์ ๊ทธ๋ฆผ์ ๊ทธ๋ฆด ๋๋ ๋ณดํต..
- ์ค์ ํ๋ฉด์ ์ง์ ๊ทธ๋ฆผ์ ๊ทธ๋ฆฌ๋ ๋์ ,
- ๊ฐ์ํ๋ฉด์ ๊ทธ๋ฆผ์ ๊ทธ๋ฆฐ ๋ค์ → ์ค์ ํ๋ฉด์ผ๋ก ๋ณต์ฌํด ๋ณด์ฌ์ค๋ค.
- ์? ์ค์ ํ๋ฉด์ ์ง์ ๊ทธ๋ฆผ์ ๊ทธ๋ฆฌ๋ฉด ๊น๋นก๊ฑฐ๋ฆผ์ด ๋ฐ์ํ๊ณ , ์คํ ์ ๊ทธ๋ฆฐ ๊ทธ๋ฆผ์ด ๋ณด์กด๋์ง ์๊ธฐ ๋๋ฌธ.
Image๋ก ๊ฐ์ํ๋ฉด ์ฌ์ฉํ๊ธฐ ์์ - ๋ง์ฐ์ค๋ก ๊ทธ๋ฆผ ๊ทธ๋ฆฌ๊ธฐ
๋ง์ฐ์ค๋ก ๊ทธ๋ฆผ ๊ทธ๋ฆฌ๊ธฐ (1) - drawString()์ผ๋ก ๊ทธ๋ฆฌ๊ธฐ
- Image(
img
)์ Image์ Graphics(gImg
)๋ฅผ ๋ฉค๋ฒ๋ณ์๋ก ์ ์ - ์์ฑ์์์
createImage()
๋ฅผ ํตํด Frame๊ณผ ๊ฐ์ ํฌ๊ธฐ์ Image๋ฅผ ์์ฑํด img์ ์ ์ฅ. - ์์ฑ๋ Image์์
getGraphics()
๋ฅผ ํตํด Image์ ๋ํ Graphics๋ฅผ ์ป๋๋ค.- ์ด๋ ๊ฒ ์ป์ด์ง Graphics์
drawString()
๊ณผ ๊ฐ์ ๋ฉ์๋๋ฅผ ํธ์ถํด ์์ . - ์์ ํ ๋ด์ฉ์ Image์ ๊ทธ๋ ค์ง๊ฒ ๋๋ค.
- ์ด๋ ๊ฒ ์ป์ด์ง Graphics์
paint()
์์๋ ๋จ์ํ ๊ฐ์ํ๋ฉด(Image img
)์ ๊ทธ๋ ค์ง ๋ด์ฉ์ Frame์ ๋ณต์ฌํ๊ธฐ๋ง ํ๋ฉด ๋๋ค.int getModifiers()
: ์ด๋ฒคํธ ๋ฐ์ ์ ๋๋ฅด๊ณ ์๋ ํน์ํค๋ฅผ ๋ฐํ.
import java.awt.*;
import java.awt.event.*;
public class GraphicsEx4 extends Frame implements MouseMotionListener{
// Frameํด๋์ค ์์๋ฐ๊ณ MouseMotionListener๊ตฌํ.
int x = 0;
int y = 0;
Image img = null; // Image๊ฐ์ฒด ์ ์ธ
Graphics gImg = null; //
public static void main(String[] args) {
new GraphicsEx4("GraphicsEx4");
}
public GraphicsEx4(String title) { // ์์ฑ์
super(title); // ๋ถ๋ชจํด๋์ค Frame์ ์์ฑ์ ํธ์ถ
addMouseMotionListener(this);//GraphicsEx2 ๊ฐ์ฒด์ MouseMotionListener ์ฐ๊ฒฐ
addWindowListener(new WindowAdapter() { // ์ข
๋ฃ๊ธฐ๋ฅ - Adapterํด๋์ค ํ์ฉ
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
setBounds(100, 100, 500, 500);
setVisible(true);
img = createImage(500, 500); //createImage()๋ก Image๊ฐ์ฒด๋ฅผ ์์ฑ
gImg = img.getGraphics(); //getGraphics()๋ฅผ ํตํด Image๊ฐ์ฒด์ Graphics๊ฐ์ฒด๋ฅผ ์ป์
gImg.drawString("์ผ์ชฝ ๋ฒํผ์ ๋๋ฅธ ์ฑ๋ก ๋ง์ฐ์ค๋ฅผ ์์ง์ฌ ๋ณด์ธ์.", 10, 50);
repaint();
}
public void paint(Graphics g) {
if(img != null) {
g.drawImage(img,0,0,this);
// ๊ฐ์ํ๋ฉด์ ๊ทธ๋ ค์ง ๊ทธ๋ฆผ์ Frame์ ๋ณต์ฌ
}
}
// MouseMotionListener ์ด๋ฒคํธ์ฒ๋ฆฌ ๋ฉ์๋
public void mouseMoved(MouseEvent me) {}
// ๋ง์ฐ์ค๋ฅผ ํด๋ฆญํด์ ์์ง์ผ(=๋๋๊ทธ) ๋๋ง ๊ทธ๋ ค์ง๋ฏ๋ก mouseDragged()์ ์ด๋ฒคํธ์ฒ๋ฆฌ๋ฅผ ํด ์ค๋ค.
public void mouseDragged(MouseEvent me){
if (me.getModifiersEx() == MouseEvent.BUTTON1_DOWN_MASK) {
// MouseEvent๋ฐ์ ์ ๋๋ฅด๊ณ ์๋ ํค ๊ฐ == ๋ง์ฐ์ค ์ผ์ชฝ ๋ฒํผ ์ด๋ฉด.
x = me.getX();
y = me.getY();
gImg.drawString("*", x, y);
repaint();
}
}
} // class GraphicsEx4
๋ง์ฐ์ค๋ก ๊ทธ๋ฆผ ๊ทธ๋ฆฌ๊ธฐ (2) - drawLine()์ผ๋ก ๊ทธ๋ฆฌ๊ธฐ
- ์ ์์ ์ drawString() ๋์ drawLine()์ ์ฌ์ฉํด ๋ ์์ ๋กญ๊ฒ ์ ์ ๊ทธ๋ฆด ์ ์๋ค.
- ์ฐจ์ด์ :
paint()
,mouseMoved()
,mouseDragged()
๋ถ๋ถ์ด ๋ค๋ฅด๋ค.- โ ์ ๋ค๋ฅผ๊น?..
import java.awt.*;
import java.awt.event.*;
public class GraphicsEx5 extends Frame implements MouseMotionListener {
// Frameํด๋์ค ์์๋ฐ๊ณ MouseMotionListener๊ตฌํ.
int x = 0;
int y = 0;
Image img = null; // Image๊ฐ์ฒด ์ ์ธ(๊ฐ์ํ๋ฉด)
Graphics gImg = null; // img์ Graphics๊ฐ์ฒด๋ฅผ ๋ด์ ๋ณ์ ์ ์ธ
public static void main(String[] args) {
new GraphicsEx5("GraphicsEx5");
}
public GraphicsEx5(String title) { // ์์ฑ์
super(title); // ๋ถ๋ชจํด๋์ค Frame์ ์์ฑ์ ํธ์ถ
addMouseMotionListener(this);//GraphicsEx2 ๊ฐ์ฒด์ MouseMotionListener ์ฐ๊ฒฐ
addWindowListener(new WindowAdapter() { // ์ข
๋ฃ๊ธฐ๋ฅ - Adapterํด๋์ค ํ์ฉ
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
setBounds(100, 100, 500, 500);
setVisible(true);
img = createImage(500, 500); // (๊ฐ์ํ๋ฉด) createImage()๋ก Image๊ฐ์ฒด ์์ฑ
gImg = img.getGraphics(); //getGraphics()๋ฅผ ํตํด Image๊ฐ์ฒด์ Graphics๊ฐ์ฒด๋ฅผ ์ป์
gImg.drawString("์ผ์ชฝ ๋ฒํผ์ ๋๋ฅธ ์ฑ๋ก ๋ง์ฐ์ค๋ฅผ ์์ง์ฌ ๋ณด์ธ์.", 10, 50);
repaint();
}
public void paint(Graphics g) {
if (img == null) return; // ๊ฐ์ํ๋ฉด์ ๊ทธ๋ ค์ง ๊ฒ ์์ผ๋ฉด paint() ์ข
๋ฃ
g.drawImage(img, 0, 0, this);
// ๊ฐ์ํ๋ฉด์ ๊ทธ๋ ค์ง ๊ทธ๋ฆผ์ Frame์ ๋ณต์ฌ
}
// MouseMotionListener ์ด๋ฒคํธ์ฒ๋ฆฌ ๋ฉ์๋
public void mouseMoved(MouseEvent me) {
x = me.getX(); //MouseEvent ๋ฐ์ํ์ ๋, ๋ง์ฐ์คํฌ์ธํฐ์ x์ขํ
y = me.getY();
}
public void mouseDragged(MouseEvent me) {
if (me.getModifiersEx() != MouseEvent.BUTTON1_DOWN_MASK) return;
// MouseEvent๋ฐ์ํ์ ๋ ๋๋ฅด๊ณ ์๋ ํค ๊ฐ์ด ๋ง์ฐ์ค ์ผ์ชฝ ๋ฒํผ์ด ์๋๋ฉด ์ข
๋ฃ.
gImg.drawLine(x, y, me.getX(), me.getY());
x = me.getX();
y = me.getY();
repaint();
}
} // class GraphicsEx5
์ด๋ฏธ์ง ์ฝ์ ํ๊ธฐ ์์
- ์ด๋ฏธ์ง(img)๋ฅผ ํ๋ฉด ์ค์์ ๋ณด์ฌ์ฃผ๋ ์์ .
- ํ์ผ๋ช
์ ๊ฒฝ๋ก๋ฅผ ํจ๊ป ์ง์ ํด์ฃผ๋ ๊ฒ์ด ์ข๋ค.
- ์ด๋ฏธ์งํ์ผ์ด ์์ ์ ํด๋์คํ์ผ๊ณผ ๊ฐ์ ๊ฒฝ๋ก์ ์๋ ๊ฒฝ์ฐ, ๊ฒฝ๋ก๋ช ์ ์๋ตํ ์ ์๋ค.
import java.awt.*;
import java.awt.event.*;
class GraphicsEx6 extends Frame {
Image img = null;
public GraphicsEx6(String title) {//์์ฑ์
super(title);
addWindowListener(new WindowAdapter() {// ์ด๋ฒคํธ - ์ฐฝ๋ซ๊ธฐ ๋ฒํผ
public void windowClosing(WindowEvent we) {
System.exit(0);
}
});
Toolkit tk = Toolkit.getDefaultToolkit();
img = tk.getImage("sampleBibiImg.jpg");
setBounds(100, 100, 400, 300);
setVisible(true);
}
public static void main(String[] args) {
new GraphicsEx6("GraphicsEx6");
}
public void paint(Graphics g) {
if (img == null) return;
// Image์ ํฌ๊ธฐ๋ฅผ ์ป๋๋ค
int imgWidth = img.getWidth(this); // getWidth(ImageObserver obj)
int imgHeight = img.getHeight(this); // getHeight(ImageObserver obj)
//์ด๋ฏธ์ง๋ฅผ Frame์ ์ค์์ ์ถ๋ ฅํ๋ค
g.drawImage(img, (getWidth() - imgWidth) / 2,
(getHeight() - imgHeight) / 2, this);
}
} // class