मैं जर्मन सीखने वाले लोगों के लिए जावा एप्लिकेशन पर काम कर रहा हूं, और मैंने इस भाषा के विशेष पात्रों के साथ एक समस्या में भाग लिया है। मैं जेटीक्स्टफिल्ड का उप-वर्ग बनाना चाहता हूं जो एएलटीआई ए के रूप में एएलटी + ए के रूप में एएसी, एएलटी + ओ के रूप में व्याख्या करेगा, जबकि सभी 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-एक या के लिए पैदा करता है पर निर्भर करता है बनाने के लिए Alt-o, जो संभवतः ओएस या कीबोर्ड की क्षेत्रीय सेटिंग्स पर निर्भर करेगा। – Pao
आप किस ऑपरेटिंग सिस्टम पर काम कर रहे हैं? आप इसे लिखते हैं "ALT + o उत्पादन करता है" लेकिन अधिकांश ओएस पर मुझे पता है, Alt अनुप्रयोग शॉर्टकट के लिए उपलब्ध है। एक उल्लेखनीय अपवाद ओएस एक्स है, जहां Alt [Alt Gr] (http://en.wikipedia.org/wiki/AltGr_key) की भूमिका निभाता है यानी वैकल्पिक वर्ण सक्षम करता है। – MvG