Java Key Press活动

时间:2014-04-19 04:17:45

标签: java swing

我正在尝试使用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();
}

}

2 个答案:

答案 0 :(得分:1)

只需使用:

textField.setText((char)2433);

textField.getText()+(char)2433TextField的现有内容附加到新角色。


编辑以回应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教程中的部分,了解更多信息以及开始使用的示例。