๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Study/Java

์ž๋ฐ”ํ”„๋กœ๊ทธ๋ž˜๋ฐ 10์ฃผ์ฐจ ์ •๋ฆฌ

์ˆ˜์—…๋‚ ์งœ/์ •๋ฆฌ๋‚ ์งœ

2022.05.10/2022.05.15

 

ํ•™์Šต์ฃผ์ œ
  • 10 ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ

 

ํ•™์Šต๋‚ด์šฉ

10 ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ

์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ๋ฐฉ์‹ ์ •๋ฆฌ
1. ์ด๋ฒคํŠธ ์ข…๋ฅ˜: ActionEvent
2. ๋ฆฌ์Šค๋„ˆ ์ด๋ฆ„: ActionListener
3. ๋ฆฌ์Šค๋„ˆ ๊ตฌํ˜„: actionPerformed
4. ๋ฆฌ์Šค๋„ˆ ๋“ฑ๋ก: addActionListener

Key ์ด๋ฒคํŠธ

๋ฉ”์†Œ๋“œ ์„ค๋ช…
keyPress(KeyEvent e) ์‚ฌ์šฉ์ž๊ฐ€ ํ‚ค๋ฅผ ๋ˆŒ๋ €์„ ๊ฒฝ์šฐ์— ํ˜ธ์ถœ
keyTyped(KeyEvent e) ์‚ฌ์šฉ์ž๊ฐ€ ๊ธ€์ž๋ฅผ ์ž…๋ ฅํ–ˆ์„ ๊ฒฝ์šฐ์— ํ˜ธ์ถœ
keyReleased(KeyEvent e) ์‚ฌ์šฉ์ž๊ฐ€ ํ‚ค์—์„œ ์†์„ ๋–ผ์—ˆ์„ ๊ฒฝ์šฐ์— ํ˜ธ์ถœ

โ€ป keyTyped() โ†’ Alt, Ctrl, Shift๋Š” ๋ฌธ์žํ‚ค๊ฐ€ ์•„๋‹ˆ๋ฏ€๋กœ ์ž…๋ ฅ ์•ˆ๋จ

 

ํ‚ค ์ด๋ฒคํŠธ ์˜ˆ์ œ

ํ‚ค๋ณด๋“œ์—์„œ ๋ฌธ์ž๊ฐ€ ์ž…๋ ฅ๋˜๋ฉด ๋ฌธ์ž์™€ ํ‚ค ์ฝ”๋“œ, Alt๋‚˜ Ctrl, Shift ํ‚ค์˜ ๋ˆŒ๋ฆผ ์—ฌ๋ถ€๋ฅผ ํ…์ŠคํŠธ ์˜์—ญ์—์„œ ์ถœ๋ ฅ

public class KeyEventTest extends JFrame implements KeyListener{
private JPanel panel;
privet JTextField field;
private JTextArea area;
public keyEventTest(){
panel = new JPanel(new GridLayout(0, 2));
panel.add(new JLabel("๋ฌธ์ž๋ฅผ ์ž…๋ ฅํ•˜์‹œ์˜ค: "));
field = new JTextField(10); // #2: ๋ˆ„๋ฅผ ๋•Œ๋งˆ๋‹ค ์ด๋ฒคํŠธ๋ฐœ์ƒ(ํ…์ŠคํŠธํ•„๋“œ์— ์ปค์„œ ๋‘๊ณ  ์ž…๋ ฅ)
panel.add(field);
field.addKeyListener(this);
area = new JTextArea(3, 30); // ํ–‰๋ ฌ
add(panel, BorderLayout.NORTH);
add(area, BorderLayout.CENTER);
setTitle("KeyEvent Test");
setSize(400, 200);
setVisible(true);
}
public static void main(String[] args){new KeyEventTest();}
// 3๊ฐœ ๋ชจ๋‘ ์˜ค๋ฒ„๋ผ์ด๋”ฉ
public void keyPressed(KeyEvent e){display(e, "Key Pressed ");}
public void keyTyped(KeyEvent e){display(e, "Key Typed ");}
public void keyReleased(KeyEvent e){display(e, "Key Released ");} // display ํ•จ์ˆ˜
protected void display(KeyEvent e, String s){
char c = e.getKeyChar();
int keyCode = e.getKeyCode();
String modifiers = "Alt: " + e.isAltDown() + "Ctrl: " + e.isControlDown() + "Shift: " + e.isShiftDown();
// Alt๋ˆŒ๋ ธ๋Š”์ง€ true, false
area.append(s + "๋ฌธ์ž " + c + "(์ฝ”๋“œ: " + keyCode + ") " + modifiers + "\n");
// append: ๊ธฐ์กด ๋‚ด์šฉ ๋†”๋‘๊ณ  ๋’ค์— ๋‚ด์šฉ ์ถ”๊ฐ€
}
}

 

์ž๋™์ฐจ ๊ฒŒ์ž„ ์˜ˆ์ œ

ํ‚ค๋ณด๋“œ์˜ ํ™”์‚ดํ‘œ ํ‚ค๋กœ ์›€์ง์ด๋Š” ์ž๋™์ฐจ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ž‘์„ฑ

public class CarGameTest extends JFrame{
public CarGameTest(){
setSize(300, 300)
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
add(new MyPanel());
setVisible(true);
}
public static void main(String[] args){CarGameTest s = new CarGameTest();}
}
class MyPanel extends JPanel{
BufferedImage img = null; // ๊ฐ์ฒด์ฐธ์กฐ๋ณ€์ˆ˜(์ด๋ฏธ์ง€ ๋งŒ๋“ค ์ค€๋น„)
int img_x = 100, img_y = 100;
public void paintComponent(Graphics g){ // JPanel ์˜ค๋ฒ„๋ผ์ด๋”ฉ(JPanel ์ƒ์†์ด์œ : paintComponent ์‚ฌ์šฉํ•˜๋ ค๊ณ )
super.paintComponents(g); // JPanel์˜ painComponenet ํ˜ธ์ถœ(ํˆฌ๋ช…(๋นˆ) ํŒจ๋„ ๊ทธ๋ฆผ) -> ์—†์œผ๋ฉด ์ด๋ฏธ์ง€ ์ด๋™ ์‹œ, ์ž”์ƒ ๋‚จ์Œ
g.drawImage(img, img_x, img_y, null); // ์ด๋ฏธ์ง€๋ฅผ x:100, y:100์— ๊ทธ๋ ค๋ผ
}
public MyPanel(){ // MyPanel์ƒ์„ฑ์ž
try{img = ImageIO.read(new File("car.gif"));} // ์ด๋ฏธ์ง€ ์ž…์ถœ๋ ฅ
catch(IOException e){System.out.print("no image"); System.exit(1);} // ํŒŒ์ผ ๋ชป์ฐพ์œผ๋ฉด ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฃŒ
addKeyListener(new KeyListener(){ // MyPanel์˜ addKeyListener.(this์ƒ๋žต)
public void keyPressed(KeyEvent e){ // ๋ฌด๋ช…ํด๋ž˜์Šค
int keycode = e.getKeyCode();
switch (keycode) {
case KeyEvent.VK_UP: img_y -= 10; break;
case KeyEvent.VK_DOWN: img_y += 10; break;
case KeyEvent.VK_LEFT: img_x -= 10; break;
case KeyEvent.VK_RIGHT: img_x += 10; break;
}
repaint();} // ๋‹ค์‹œ ๊ทธ๋ฆฌ๊ธฐ. paintComponent ์‹คํ–‰๋จ
public void keyReleased(KeyEvent arg0){}
public void keyTyped(KeyEvent arg0){}
});
this.requestFocus(); // ํฌ์ปค์Šค์š”์ฒญ
setFocusable(true); // ํฌ์ปค์Šค ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ์œผ๋กœ true (์•ก์…˜์ทจํ•œ ์ปดํฌ๋„ŒํŠธ์—๊ฒŒ focus๋จ)
}
}

 

Mouse ์ด๋ฒคํŠธ

MouseListener ์ธํ„ฐํŽ˜์ด์Šค

๋ฉ”์†Œ๋“œ ์„ค๋ช…
mouseClicked(MouseEvent e) ์‚ฌ์šฉ์ž๊ฐ€ ์ปดํฌ๋„ŒํŠธ๋ฅผ ํด๋ฆญํ•œ ๊ฒฝ์šฐ์— ํ˜ธ์ถœ๋œ๋‹ค.
mouseEntered(MouseEvent e) ๋งˆ์šฐ์Šค ์ปค์„œ๊ฐ€ ์ปดํฌ๋„ŒํŠธ๋กœ ๋“ค์–ด๊ฐ€๋ฉด ํ˜ธ์ถœ๋œ๋‹ค
mouseExited(MouseEvent e) ๋งˆ์šฐ์Šค ์ปค์„œ๊ฐ€ ์ปดํฌ๋„ŒํŠธ์—์„œ ๋‚˜๊ฐ€๋ฉด ํ˜ธ์ถœ๋œ๋‹ค.
mousePressed(MouseEvent e) ๋งˆ์šฐ์Šค๊ฐ€ ์ปดํฌ๋„ŒํŠธ ์œ„์—์„œ ๋ˆŒ๋ ค์ง€๋ฉด ํ˜ธ์ถœ๋œ๋‹ค.
mouseReleased(MouseEvente e) ๋งˆ์šฐ์Šค๊ฐ€ ์ปดํฌ๋„ŒํŠธ ์œ„์—์„œ ๋–ผ์–ด์ง€๋ฉด ํ˜ธ์ถœ๋œ๋‹ค.

 

Mouse ์ด๋ฒคํŠธ ์ˆœ์„œ

  1. Mouse pressed
  2. Mouse released
  3. Mouse cliked

 

MouseMotionListener ์ธํ„ฐํŽ˜์ด์Šค

๋ฉ”์†Œ๋“œ ์„ค๋ช…
mouseDragged(MouseEvent e) ๋งˆ์šฐ์Šค ๋“œ๋ž˜๊ทธํ•˜๋ฉด ํ˜ธ์ถœ๋œ๋‹ค.
mouseMoved(MouseEvent e) ๋งˆ์šฐ์Šค๊ฐ€ ํด๋ฆญ๋˜์ง€ ์•Š๊ณ  ์ด๋™ํ•˜๋Š” ๊ฒฝ์šฐ์— ํ˜ธ์ถœ๋œ๋‹ค.

 

MouseEvent

class MyPanel extends JPanel {
BufferedImage img = null;
int img_x = 0, img_y = 0;
public MyPanel() {
try {
img = ImageIO.read(new File("car.gif"));
} catch (IOException e) {
System.out.println("no image");
System.exit(1);
}
addMouseListener(new MouseListener() {
public void mousePressed(MouseEvent e) {
img_x = e.getX();
img_y = e.getY();
repaint();
}
public void mouseReleased(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mouseClicked(MouseEvent e) {}
});
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(img, img_x, img_y, null);
}
}
public class MyFrame extends JFrame {
public MyFrame() {
add(new MyPanel());
setSize(300, 500);
setVisible(true);
}
public static void main(String[] arg) {
new MyFrame();
}
}

 

์‚ฌ๊ฐํ˜• ๊ทธ๋ฆฌ๊ธฐ

๋งˆ์šฐ์Šค ํด๋ฆญ์œผ๋กœ ์‚ฌ๊ฐํ˜• ๊ทธ๋ฆฌ๊ธฐ

class Rectangle { // ์‚ฌ๊ฐํ˜• ๊ทธ๋ฆฌ๋Š” ํด๋ž˜์Šค
int x, y, w, h;
}
class MyPanel extends JPanel implements MouseListener {
BufferedImage img = null;
int img_x = 0, img_y = 0;
Rectangle[] array = new Rectangle[100]; // ๊ฐ์ฒด ๋ฐฐ์—ด. ํด๋ž˜์Šค ๋ฐฐ์—ด ์“ฐ๋Š” ์ด์œ : paintComponent๊ฐ€ ๋งค๋ฒˆ ์ƒˆ๋กœ ๊ทธ๋ฆผ->์ง€์›Œ์ง€์ง€์•Š๊ณ  ๊ณ„์† ๊ทธ๋ฆผ(๊ฐ์ฒด์œ ์ง€)
int index = 0;
public MyPanel() {
this.addMouseListener(this);
}
public void paintComponent(Graphics g) { // JPanel์˜ paintComponent -> ๋นˆํŒจ๋„ ๊ทธ๋ฆผ
super.paintComponent(g);
for (Rectangle r : array) // ๋ฐฐ์—ด์œ„์น˜ ๋ฐ˜๋ณต๋ฌธ(for each)
if (r != null)
g.drawRect(r.x, r.y, r.w, r.h); // drawRect: ์‚ฌ๊ฐํ˜• ๊ทธ๋ฆผ, ์‹ค๋งค๊ฐœ๋ณ€์ˆ˜ 4๊ฐœ ํ•„์š”
}
@Override
public void mousePressed(MouseEvent e) {
if (index > 100)
return;
array[index] = new Rectangle(); // ์‚ฌ๊ฐํ˜• ๊ฐ์ฒด ์ƒ์„ฑ
array[index].x = e.getX(); // getX: ํด๋ฆญํ•œ x์ขŒํ‘œ
array[index].y = e.getY(); // getY: ํด๋ฆญํ•œ y์ขŒํ‘œ
array[index].w = 50;
array[index].h = 50;
index++;
repaint();
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mouseClicked(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
}
public class MouseEventTest extends JFrame {
public MouseEventTest() {
setSize(300, 300);
setTitle("๋งˆ์šฐ์Šค๋กœ ์‚ฌ๊ฐํ˜• ๊ทธ๋ฆฌ๊ธฐ");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
add(new MyPanel());
setVisible(true);
}
public static void main(String[] args) {
MouseEventTest s = new MouseEventTest();
}
}

 

์–ด๋Œ‘ํ„ฐ ํด๋ž˜์Šค

  • ๋ฆฌ์Šค๋„ˆ์— ๋Œ€์‘๋˜๋Š” ์–ด๋Œ‘ํ„ฐ ํด๋ž˜์Šค (๋Œ€์‹  ๋‹ค์ค‘ ์ƒ์† ๋ถˆ๊ฐ€...)
  • ์›ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋งŒ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ๊ฐ€๋Šฅ (์›ํ•˜๋Š”๊ฒƒ๋งŒ ์ƒ์† ๋ฐ›์•„...)
์ธํ„ฐํŽ˜์ด์Šค ์–ด๋Œ‘ํ„ฐ ํด๋ž˜์Šค
ComponentListener ComponentAdapter
ContainerListener ContainerAdapter
FocusListener FocusAdapter
KeyListener KeyAdapter
MouseListener MouseAdapter
MouseMotionListener MouseMotionAdapter
WindowListener WindowAdapter

 

๋ฆฌ์Šค๋„ˆ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ โ†’ ๋ชจ๋‘ ์˜ค๋ฒ„๋ผ์ด๋”ฉ

์–ด๋Œ‘ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ โ†’ ํ•„์š”ํ•œ ๊ฒƒ๋งŒ ์˜ค๋ฒ„๋ผ์ด๋”ฉ(๋‹จ, ๋‹ค์ค‘ ์ƒ์† ๋ถˆ๊ฐ€)


ํ•™์Šต๋‚ด์šฉ ์ดํ•ด๋„

85% ์ •๋„

 

ํ•™์Šตํ™œ๋™ ๋Œ์•„๋ณด๊ธฐ

์ €๋ฒˆ์— ๋ฐฐ์šด ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ์—ฐ์žฅ์„ ์ด๋ผ ๋งค์šฐ ์–ด๋ ต์ง€๋Š” ์•Š์•˜๋‹ค. ๋‹ค๋งŒ, ๋ฐฐ์šด ๋‚ด์šฉ์„ ์ ์šฉํ•˜๋Š” ์˜ˆ์ œ๊ฐ€ ๋‹ค์†Œ ๋ณต์žกํ•ด ์–ด๋ ต๊ฒŒ ๋А๊ปด์กŒ๋‹ค. ์ฝ”๋“œ ํ•˜๋‚˜ํ•˜๋‚˜ ์ดํ•ดํ•ด ๊ฐ€๋ฉฐ ๋ณต์Šตํ•˜๋‹ˆ, ๊ทธ๋‚˜๋งˆ ๊ดœ์ฐฎ์•˜๋‹ค.

์ž๋™์ฐจ ์ด๋ฏธ์ง€ ์ด๋™ ์˜ˆ์ œ๊ฐ€ ํŠนํžˆ ๋ณต์žกํ–ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ฒˆ ๋ฐ˜๋ณต ๋ณต์Šต ํ•ด์•ผ๊ฒ ๋‹ค.

 

๋‹ค์Œ ํ•™์Šต๊ณ„ํš

์Šค์œ™ ์ปดํฌ๋„ŒํŠธ์˜ ํ™œ์šฉ