我正在尝试使用Java Swing创建一个孟加拉语键盘。我正在访问关键新闻事件并用相关的孟加拉语字符替换特定字符。我得到的问题是原始的英文字符仍然在最后附加。怎么阻止它?这是代码。
public void keyPressed(KeyEvent e)
{
if(e.getKeyCode() == 54)
{
textField.setText(textField.getText()+(char)2433);
}
if(e.getKeyCode() == 65)
{
textField.setText(textField.getText()+(char)2438);
}
}
输出就像“আa”,应该只是“আ”。
提前致谢。
以下是完整的代码:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Phonetic extends JFrame
{
public Phonetic()
{
setTitle("Antaryāmī");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
getContentPane().setLayout(null);
textField = new JTextField();
textField.setFont(new Font("Mukti Narrow", Font.PLAIN, 20));
textField.setBounds(12, 33, 614, 383);
getContentPane().add(textField);
textField.setColumns(10);
textField.addKeyListener(new KeyListener()
{
@Override
public void keyPressed(KeyEvent e)
{
if(e.getKeyCode() == 54)
{
textField.setText(textField.getText()+(char)2433);
}
if(e.getKeyCode() == 65)
{
textField.setText(textField.getText()+(char)2438);
}
}
@Override
public void keyTyped(KeyEvent e)
{
}
@Override
public void keyReleased(KeyEvent e)
{
}
});
this.setSize(650, 450);
this.show();
}
/**
*
*/
private static final long serialVersionUID = 1L;
private JTextField textField;
public static void main(String args[])
{
new Phonetic();
}
}
答案 0 :(得分:1)
只需使用:
textField.setText((char)2433);
textField.getText()+(char)2433
将TextField
的现有内容附加到新角色。
编辑以回应OP的评论:
在按钮点击等事件上翻译用户输入效率更高。因为当他/她输入一个字母你将它转换成孟加拉语时,你会混淆用户。
我的意思是你可以等到用户完成单词,然后显示结果,如果你需要实时翻译(如果我们可以这样称呼),更好的选择是单独TextField
那你应该说
translateTextField.setText(translateTextField.getText()+(char)2438);
在原始TextField
的按键上引发事件。我希望这很清楚。
如果你想编辑代码,试试这个:(假设convert
是一个转换所有字符串和字符(e)并连接它们的方法)
public void keyPressed(KeyEvent e)
{
s = textField.getText();
textField.setText(convert(s, e.getKeyCode));
}
答案 1 :(得分:1)
不要使用KeyListener。
而是使用DocumentFilter
。当文本插入到文本字段中时,将调用DocumentFilter。此时,您应该将键入的字符转换为要插入Document的字符,然后调用super方法。您将需要覆盖insertString()和replace()方法。
阅读Implementing a Document Filter上Swing教程中的部分,了解更多信息以及开始使用的示例。