Posted by 김덕태 on November 25, 1997 at 03:06:46:
In Reply to: 키 이벤트 처리... (실수.. 다시 올리기) posted by 김덕태 on November 25, 1997 at 02:14:54:
다음은 이전에 올린 방법을 사용하여
입력기를 만들지 않고 TextField를 사용하여
임의의 컴포넌트에서 한글을 입력받는 예제 프로그램입니다..
이러한 방법을 응용하면 스윙 컴포넌트에서도
간단하게 한글을 입력받도록 할 수 있을 것입니다.
import java.awt.*;
import java.awt.event.*;
class KeyEventTest3
{
public static void main(String[] args)
{
KeyEventTest3 tester = new KeyEventTest3();
Frame f = new Frame();
f.add( tester.display, "Center" );
f.add( tester.input, "West" );
f.setSize(300, 300);
f.setVisible(true);
}
int posX = 0, posY = 0; // 출력 위치
String inputString = ""; // 출력 문자열
TextField input = new TextField()
{ // TextField가 출력되지 않도록 크기를 0으로 만든다.
public Dimension getPreferredSize()
{ return new Dimension(0,0);
}
};
Canvas display = new Canvas()
{
public void paint(Graphics g)
{ g.drawString( inputString, posX, posY );
}
};
KeyEventTest3()
{
display.addMouseListener( ml );
display.addFocusListener( fl );
input.addKeyListener( kl );
}
MouseListener ml = new MouseAdapter()
{ public void mousePressed(MouseEvent ev)
{ inputString = "";
posX = ev.getX();
posY = ev.getY();
input.requestFocus(); // 포커스를 TextField로 전송
}
};
FocusListener fl = new FocusAdapter()
{ public void focusGained(FocusEvent ev)
{ input.requestFocus(); // 포커스를 TextField로 전송
}
};
KeyListener kl = new KeyAdapter()
{ public void keyTyped(KeyEvent ev)
{ inputString += ev.getKeyChar();
// 네이티브 입력기로부터의 한글이 전달된다.
display.repaint();
}
};
}