Ho un paio di metodi di input per la scrittura (cinese tradizionale) taiwanese forniti con Windows 7. Inoltre, tutti i metodi di input hanno un'opzione per cambiare il carattere larghezza (caratteri a byte singolo/doppio byte).Cambio automatico della larghezza dei caratteri con i metodi di input di Windows 7 in Java
- Cinese (tradizionale) - Nuova rapida
- Cinese (tradizionale) - ChangJie
- Cinese (tradizionale) - Quick
- Cinese (tradizionale) - Phonetic
- Cinese (tradizionale) - New Phonetic
- Cinese (tradizionale) - Nuova ChangJie
Se seleziono uno di questi metodi di input nell'applicazione Java e impostare la larghezza del carattere a metà larghezza (modalità carattere a byte singolo) posso inserire correttamente il testo in JTextField. Tuttavia, se l'applicazione visualizza una finestra di dialogo (ad esempio JOptionPane) o una finestra pop-up, la larghezza del carattere del metodo di immissione cambierà automaticamente in full-width (modalità caratteri a doppio byte). Successivamente, l'utente deve passare manualmente a caratteri a mezza larghezza.
Posso attivare o disattivare a livello di codice il metodo di input utilizzando la classe Java "InputContext", ma non riesco a controllare se il metodo di input è impostato sulla modalità carattere a larghezza intera/mezza larghezza (singolo/doppio byte) .
Ho pensato che potrebbe essere disattivato dalle impostazioni del metodo di input di Windows, ma non c'era alcuna opzione relativa al passaggio automatico della larghezza del carattere.
La domanda è: C'è un modo per gestire (disabilitare) questa commutazione automatica?
Ecco un codice di esempio per testare questo con i metodi di immissione sopra:
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);
}
}
Grazie.
Solo un nitpick, ma non penso che le [forme piene/a mezza larghezza] (http://en.wikipedia.org/wiki/Halfwidth_and_Fullwidth_Forms) abbiano qualcosa a che fare con il numero di byte che consumano in UTF -16. Non che questo aiuti con il problema. +1 – McDowell
Ci sono molte cose che le persone scoprono che il JOptionPane ha torto e l'unica soluzione semplice è quella di crearne di propri. Ho creato la mia classe JDialog per Java e da allora lo utilizzo da sempre. –