用java写Unicode(Sindhi)的keyListener实现的问题
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了用java写Unicode(Sindhi)的keyListener实现的问题,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3512字,纯文字阅读大概需要6分钟。
内容图文
![用java写Unicode(Sindhi)的keyListener实现的问题](/upload/InfoBanner/zyjiaocheng/690/49131467fb8a47fcade691e506ce427e.jpg)
我想以这种方式通过在jTextField上实现keyListener来使用unicode:
textField.addKeyListener(new KeyListener() {
@Override
public void keyTyped(KeyEvent evt) {
// TODO Auto-generated method stub
}
@Override
public void keyReleased(KeyEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void keyPressed(KeyEvent evt) {
// TODO Auto-generated method stub
char var = evt.getKeyChar();
if(var == 'a'){
String values = urlTextField.getText() + Sindhi.ALIF;
urlTextField.setText(values);
}
}
});
但是它用统一字符Sindhi.ALIF编写英文字符.如何只获取用jTextField编写的Unicode字符
解决方法:
无论您当前遇到什么问题,都不应在JTextField中使用KeyListener.请改用DocumentListener或DocumentFilter.给定您的代码,我猜测您需要的是DocumentFilter,因为您希望在输入JTextField并在显示之前更改JTextField的文本.
例如.,
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.DocumentFilter;
import javax.swing.text.PlainDocument;
public class SwapAForAleph {
// No idea of the correct unicode for this!!!
public static final char SINDHI_ALIF = '\u0623';
public static void main(String[] args) {
final JTextField textField = new JTextField(10);
textField.setFont(textField.getFont().deriveFont(32f));
PlainDocument doc = (PlainDocument) textField.getDocument();
doc.setDocumentFilter(new DocumentFilter() {
@Override
public void insertString(FilterBypass fb, int offset, String text,
AttributeSet attr) throws BadLocationException {
text = filterText(text);
super.insertString(fb, offset, text, attr);
}
@Override
public void replace(FilterBypass fb, int offset, int length,
String text, AttributeSet attrs) throws BadLocationException {
text = filterText(text);
super.replace(fb, offset, length, text, attrs);
}
private String filterText(String text) {
return text.replace('a', SINDHI_ALIF);
}
});
JPanel panel = new JPanel();
panel.add(textField);
JOptionPane.showMessageDialog(null, panel);
}
}
或以另一种方式看…
import java.awt.ComponentOrientation;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.DocumentFilter;
import javax.swing.text.PlainDocument;
public class NonEnglishTextField {
public static final char ALEPH = '\u05D0';
public static void main(String[] args) {
final JTextField textField = new JTextField(20);
textField.setFont(textField.getFont().deriveFont(32f));
textField.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
textField.setHorizontalAlignment(SwingConstants.RIGHT);
PlainDocument doc = (PlainDocument) textField.getDocument();
doc.setDocumentFilter(new DocumentFilter() {
@Override
public void insertString(FilterBypass fb, int offset, String text,
AttributeSet attr) throws BadLocationException {
text = filterText(text);
super.insertString(fb, offset, text, attr);
}
@Override
public void replace(FilterBypass fb, int offset, int length,
String text, AttributeSet attrs) throws BadLocationException {
text = filterText(text);
super.replace(fb, offset, length, text, attrs);
}
private String filterText(String text) {
StringBuilder sb = new StringBuilder();
for (char c : text.toLowerCase().toCharArray()) {
if (c >= 'a' && c <= 'z') {
char newChar = (char) (c - 'a' + ALEPH);
sb.append(newChar);
} else {
sb.append(c);
}
}
return sb.toString();
}
});
JPanel panel = new JPanel();
panel.add(textField);
JOptionPane.showMessageDialog(null, panel);
}
}
内容总结
以上是互联网集市为您收集整理的用java写Unicode(Sindhi)的keyListener实现的问题全部内容,希望文章能够帮你解决用java写Unicode(Sindhi)的keyListener实现的问题所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。