ドイツ語を学ぶ人々のためのJavaアプリケーションで作業しています。この言語の特殊文字に問題があります。私はJTextFieldのサブクラスを作成して、ALT + aをä、ALT + oをöなどと解釈し、すべてのASCII文字に対して通常どおりに動作させたいと考えています。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
)のために文字の配列を作成するために、あなたができる、Locale
についてuseractionで設定したり、 Alt-oは、osやキーボードの地域設定に依存する可能性があります。 – Paoあなたは現在どのオペレーティングシステムを使用していますか?あなたはあなたのために "ALT + oはoを生成する"と書いていますが、私が知っているほとんどのOSではAltをアプリケーションのショートカットに利用できます。注目すべき例外はOS Xで、Altは[Alt Gr](http://en.wikipedia.org/wiki/AltGr_key)の役割を果たします。つまり、代替文字を有効にします。 – MvG