독일어를 배우는 사람들을위한 Java 응용 프로그램을 만들고 있는데이 언어의 특수 문자에 문제가 있습니다. 나는 JTextField의 하위 클래스를 만들어 모든 ASCII 문자에 대해 평소와 같이 동작하면서 ALT + a를 ä, ALT + o를 ö로 해석하는 등의 작업을 수행합니다.JTextField의 독일어 문자
내 시도 지금까지 :
이public class GermanTextField extends JTextField implements KeyListener{
public GermanTextField() {
init();
}
// other constructors ...
private void init() {
addKeyListener(this);
}
public void keyPressed(KeyEvent arg0) {}
public void keyReleased(KeyEvent arg0) {}
public void keyTyped(KeyEvent evt) {
if(evt.getKeyChar() == 'o' && evt.isAltGraphDown()){
setText(getText() + "ö");
evt.consume();
}
}
}
코드 위 (표준 JTextField를 같은 GermanTextField
동작합니다)를 작동하지 않습니다, 나는 콘솔에 evt.getKeyChar()
를 인쇄 할 때이 내가 무엇을 얻을 수 있습니다 :
?
?
?
?
이를 내 시스템에 ALT + o가 생성되므로 내 자신의 언어 때문일 수 있습니다. 물론 그럴 수도 있습니다.
public void keyTyped(KeyEvent evt) {
if(evt.getKeyChar() == 'ó'){
setText(getText() + "ö");
evt.consume();
}
}
폴란드어 이외의 다른 시스템에서는 작동하지 않습니다.
내 질문은 : 언어 설정이 다른 시스템에서 예상대로 작동하는이 문제에 대한 해결책이 있습니까? MvGs에 따라이 문제에 대한
전체 솔루션은 답변 :
package daswort.gui;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.HashMap;
import java.util.Map;
import javax.swing.JTextField;
public class GermanTextField extends JTextField implements KeyListener{
private Map<Integer, String> transform =
new HashMap<Integer, String>();
public GermanTextField() {
init();
}
public GermanTextField(int columns) {
super(columns);
init();
}
public GermanTextField(String text, int columns) {
super(text, columns);
init();
}
public GermanTextField(String text) {
super(text);
init();
}
private void init() {
transform.put(KeyEvent.VK_A, "äÄ");
transform.put(KeyEvent.VK_U, "üÜ");
transform.put(KeyEvent.VK_O, "öÖ");
addKeyListener(this);
}
public void keyPressed(KeyEvent evt) {
if(evt.isAltGraphDown()){
String umlaut = transform.get(evt.getKeyCode());
if(umlaut != null){
int idx = evt.isShiftDown() ? 1 : 0;
setText(getText() + umlaut.charAt(idx));
}
}
}
public void keyReleased(KeyEvent arg0) {}
public void keyTyped(KeyEvent evt) {
if(evt.isAltGraphDown()){
evt.consume();
}
}
}
콘크리트
Locale
(자신의Encode Page
)에 대한 문자의 배열을 만들려면 Alt-o는 os 또는 키보드의 지역 설정에 따라 달라질 수 있습니다. – Pao현재 어떤 운영 체제를 사용하고 있습니까? "ALT + o가"를 생성하지만, 대부분의 OS에서는 Alt를 응용 프로그램 바로 가기로 사용할 수 있습니다. 한 가지 주목할만한 예외는 OS X입니다. Alt는 [Alt Gr] (http://en.wikipedia.org/wiki/AltGr_key)의 역할을 수행하므로 대체 문자를 사용할 수 있습니다. – MvG