gpt4 book ai didi

java - JTextField 中的德语字符

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:10:28 25 4
gpt4 key购买 nike

我正在为学习德语的人开发一个 Java 应用程序,我遇到了这种语言的特殊字符的问题。我想创建一个 JTextField 的子类,它将 ALT + a 解释为 ä,将 ALT + o 解释为 ö 等等,同时对所有 ASCII 字符表现得像往常一样。

到目前为止我的尝试:

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();
}
}


}

最佳答案

要识别独立于当前语言环境的按键事件,请不要使用 getKeyChar。相反,使用 isKeyCode() 来识别独立于与之关联的字符的键。像这样:

if (evt.getKeyCode() == KeyEvent.VK_O && evt.isAltGraphDown())

这应该匹配任何键盘布局上的 Alt Gr + O

关于java - JTextField 中的德语字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12415960/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com