Ich habe ein paar Eingabemethoden zum Schreiben (Traditionelles Chinesisch) Taiwanese, die mit Windows 7 kommen. Auch alle Eingabemethoden haben eine Option, das Zeichen zu wechseln Breite (Einzelbyte/Doppelbytezeichen).Automatische Umschaltung der Zeichenbreite durch Windows 7 Eingabemethoden in Java
- Chinesisch (traditionell) - Neues Schnell
- Chinesisch (traditionell) - ChangJie
- Chinesisch (traditionell) - Schnelles
- Chinesisch (traditionell) - Phonetik
- Chinesisch (traditionell) - New Phonetic
- Chinesisch (traditionell) - Neue ChangJie
Wenn ich einen wählen dieser Eingabemethoden in Java-Anwendung und setzen Sie die Zeichenbreite auf halbe Breite (Single-Byte-Zeichenmodus) kann ich erfolgreich Text in JTextField eingeben. Wenn die Anwendung jedoch ein Dialogfeld (z. B. JOptionPane) oder ein Popup-Fenster anzeigt, ändert sich die Zeichenbreite der Eingabemethode automatisch in die volle Breite (Doppelbyte-Zeichenmodus). Danach muss der Benutzer manuell auf Zeichen mit halber Breite umschalten.
Ich kann programmgesteuert die Eingabemethode mit der Java-Klasse "InputContext" ein- oder ausschalten, aber ich kann nicht steuern, ob die Eingabemethode auf Zeichenmodus mit voller Breite/halber Breite (Single/Double Byte) eingestellt ist .
Ich dachte, vielleicht könnte es von den Windows-Eingabemethode Einstellungen deaktiviert werden, aber es gab keine Option im Zusammenhang mit der automatischen Umschaltung der Zeichenbreite.
Die Frage ist: Gibt es eine Möglichkeit, dieses automatische Umschalten zu behandeln (deaktivieren)?
Hier ist ein Beispielcode dies mit den oben genannten Eingabemethoden zu testen:
public class Example implements ActionListener {
JFrame f = new JFrame("pasod");
JTextField txt = new JTextField();
Button btn = new Button("Locale");
public Example() {
JPanel panel = new JPanel();
panel.setLayout(new GridLayout());
btn.addActionListener(this);
panel.add(btn);
panel.add(txt);
f.add(panel);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.pack();
f.setSize(800, 100);
f.setVisible(true);
}
public static void main(String[] args) {
new Example();
}
public void actionPerformed(ActionEvent arg0) {
JOptionPane.showMessageDialog(btn, "Neso", "Neso",
JOptionPane.INFORMATION_MESSAGE);
}
}
Dank.
Nur ein Nitpick, aber ich glaube nicht, dass die [volle/halbe Breite Formen] (http://en.wikipedia.org/wiki/Halfwidth_and_Fullwidth_Forms) etwas mit der Anzahl der Bytes zu tun haben, die sie in UTF konsumieren -16. Nicht, dass das mit dem Problem hilft. +1 – McDowell
Es gibt viele Dinge, die Menschen finden, dass die JOptionPane falsch macht und die einzige einfache Lösung ist es, Ihre eigenen zu machen. Ich habe meine eigene JDialog-Klasse für Java entwickelt und verwende sie seither. –