[Java] 2020.11.26. day_25 Window Component, Key Event(KeyListener, KeyAdapter)

2020. 11. 26. 17:10Web_Back-end/Java SE

◎ Window Compoent의 종류

○ FileDialog

- FileDialog
- java.awt 패키지에서 제공하는 Window Component
파일을 선택할 때 사용
Window OS에서 제공하는 Dialog를 사용
반드시 부모창 (Window, Frame, Dialog)이 필요하다
사용법
1. 생성 FileDialog fd = new FileDialog( Frame, "Title Bar 에 들어갈 문자열", mode );
mode : 열기 (FileDialog.LOAD), 저장 (FileDialog.SAVE)
2.  사용자에게 보여주기 fd.setVisible(true);
3. 사용자가 선택한 폴더얻기 String directory = fd.getDirectory();
4. 선택한 파일명얻기 String file = fd.getFile();

○ JDialog

- JDialog
- Window Component
Window(Frame)에서 제공하는 부가적인 정보를 제공할 때 사용
JDialog의 Layout은 BorderLayout
상속하지 않고 생성하는 방법 (배치되는 컴포넌트 수가 적을 때)
1. 생성 JDialog jd = new JDialog( 부모창, "Title Bar 에 들어갈 문자열", modal여부 );
modal :  자식창이 동작했을 때 부모창이 선택되지 못하는 것
비 modal :  자식창이 동작했을 때 부모창이 선택되는 것
2. Dialog에 배치될 컴포넌트 생성 JButton jb = new JButton("버튼");
3. Dialog에 배치 jd.add("Center", jb);
4. Dialog의 크기 설정 jd.setSize();
5. Dialog 를 사용자에게 보여주기 jd.setVisible();
6. Dialog 종료처리 jd.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); //EXIT_ON_CLOSE > Error
JDialog를 상속하여 생성하는 방법 (배치되는 컴포넌트의 수가 많을 때)
- JPanel을 상속받을 수 있다
1. JDialog 상속 public class Test extends JDialog{
2. 부모창과 has a 관계 설정하는
생성자 작성
부모창 : JFrame을 상속받고 있는 클래스
  public Test( ParentWindow pw ){
    super( pw, "다이얼로그 타이틀", true );
3. Dialog에 배치될 컴포넌트 생성     JButton jbtn = new JButton("버튼");
4. 배치     add( "Center", jbtn );
5. Dialog의 크기 설정     setSize( W, H );
6. Dialog 를 사용자에게 보여주기     setVisible(true);
7. 종료처리     setDefaultCloseOperation( JFrame.DISPOSE_ON_CLOSE );

○ Key Event

  Key Event       
- 키보드의 키가 눌렸을 때 동작하는 이벤트
TextComponent인 TextField, JTextField, JPasswordField, JTextArea에서 사용할 수 있다
사용법
1. KeyListener 를 구현 KeyAdapter를 상속
public class Test extends JFrame implements KeyListener{
2. 컴포넌트 선언 JTextField jft;
3. 생성자 작성 public Test(){
  super("KeyListener사용");
4. abstract method Override public void keyPressed( KeyEvent ke ){
  //1. 키가 눌려지는 순간에 처리해야할 일 
}
public void keyTyped( KeyEvent ke ){
  //2. 키가 눌려서 문자가 입력되는 순간에 해야할 일
}
public void keyReleased( KeyEvent ke ){
  //3. 눌린 키가 올라오는 순간에 해야할 일
}
5. 텍스트 컴포넌트를 
이벤트에 등록
jtf.addKeyListener(이벤트를 처리할 객체);
jtf.addKeyListener(this);
KeyEvent로 눌린키의 키코드와 키의 문자를 얻을 수 있다
키코드 :  keyCode는 ASCII Code가 아니고 키보드의 키를 식별하기 위한 고유값
keyTyped()에서는 keyCode 얻어지지 않는다
ASCII Code는 소문자와 대문자를 식별하기 위해 다른코드 값을 가진다 // a:97, A:65
keyCode는 a라면 대소문자를 가리지 않고 동일한 값을 가진다
ke.getKeyCode()
키의 문자 :  ke.getKeyChar()