我正在爲學習德語的人員開發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();
}
}
}
以上代碼不起作用(GermanTextField
行爲就像標準的JTextField),當我打印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();
}
}
}
輸入到你的應用程序取決於什麼操作系統上的應用程序運行產生的的Alt-A或Alt-o,這可能取決於OS的區域設置或鍵盤。 – Pao
你在操作什麼操作系統?您爲您編寫「ALT + o會產生ó」,但在大多數我知道的操作系統上,Alt可用於應用程序快捷方式。一個值得注意的例外是OS X,其中Alt扮演[Alt Gr](http://en.wikipedia.org/wiki/AltGr_key)的角色,即啓用替代字符。 – MvG