시아98
174
2020-06-16 00:18:11
3
223

Java 스윙,awt GUI 이벤트 연습중에 키가 안먹습니다...



package pratice10_3;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class myframe extends JFrame {
	JLabel la = new JLabel();
	myframe() {
		setVisible(true);
		setTitle("Left 키로 문자열 교체");
		setSize(500, 200);
		Container c = getContentPane();
		c.setLayout(new FlowLayout());
		
		c.add(la);
		la.setText("Love Java");
		la.setOpaque(true);
		la.setSize(50,50);
		la.addKeyListener(new keys());
		
		c.setFocusable(true);
		c.requestFocus();
	}
	class keys extends KeyAdapter{
		public void keyPressed(KeyEvent e) {
			if(e.getKeyChar()==KeyEvent.VK_LEFT)
				la.setText("왼쪽!!");
		}
		public void keyReleased(KeyEvent e) {
			la.setText("놓았다!!");
		}
	}
	public static void main(String[] args) {
		myframe frame = new myframe();
	}
}

먼저 코드는 이렇습니다. 아직 GUI프로그래밍을 시작한지 얼마안되서 설정코드들이 두서없이 작성되어서 조금 그렇네요...

간단히 하자면 Love Java를 띄우고있는 la를 VK_LEFT를 입력하면 왼쪽!! 이라고 출력하고 싶은데 이벤트리스너가 안먹는지 출력이 안바뀌네요...LEFT키의 유니코드로도 해봤는데 안먹는 걸 보니까 제가 어디 문법이 틀린거 같은데 책이 GUI부분을 조금 대충 설명해줘서 찾기가 어렵습니다 ㅠㅠ... 어디가 틀린 걸까요??

0
  • 답변 3

  • richard7
    1k
    2020-06-16 01:51:55

    la.requestFocus();

    if(e.getKeyCode()==KeyEvent.VK_LEFT)


    이거 두 줄 수정하면 작동하네요!

  • 시아98
    174
    2020-06-16 01:57:58

    richard7/ 감사합니다!

    혹시 la.requeatFocus는 무슨 명령어인가요? 책에 그냥 포커스시키기 위해 쓰는거다라고밖에 안나와있어서 작성하면서도 어떤 객체에 넣어야하는지 모르겠네요...

  • richard7
    1k
    2020-06-16 11:25:29

    시아98

    해당 객체에게 포커스를 주는 겁니다

    해당 객체에게 KeyAdapter로 명령 값을 넣어주더라도

    포커스가 다른 객체에게 있으면 키값이 먹지 않습니다


    라고 알고 있습니다 ㅋㅋ 저도 초보라 ㅋ

    버튼 여러개 만들어놓고 각 버튼별 행동할 것 주고 테스트해보세요ㅎ

  • 로그인을 하시면 답변을 등록할 수 있습니다.