2014-04-19 39 views
0

我正在嘗試使用Java Swing創建孟加拉語鍵盤。我正在訪問重要的新聞事件,並用相關的孟加拉語字符替換特定的字符。我得到的問題是最後的英文字母仍然是附加的。如何阻止它?這是代碼。Java密鑰新聞事件

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); 
} 
} 

輸出來了像 「আ一個」,應該只有 「আ」。

在此先感謝。

以下是完整的代碼:

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(); 
} 

}

回答

1

只是用這樣的:

textField.setText((char)2433); 

textField.getText()+(char)2433追加TextField的新角色的現有內容。


編輯迴應OP的評論:

這是更有效的將用戶輸入像一個按鈕點擊事件翻譯。因爲如果他/她輸入單個字母並將其轉換爲孟加拉語,會導致用戶混淆。

我的意思是你可以等到用戶完成單詞,然後顯示結果,如果你需要實時翻譯(如果我們可以這麼稱呼它),更好的選擇是有一個單獨的TextField,你在那裏應該說

translateTextField.setText(translateTextField.getText()+(char)2438); 

,而該事件在原TextField上調按鍵。我希望這很清楚。

如果你想編輯一個代碼,試試這個:(假設convert是將所有的字符串(S)和字符(E的方法)和將它們連接起來)

public void keyPressed(KeyEvent e) 
{ 
    s = textField.getText(); 
    textField.setText(convert(s, e.getKeyCode)); 
} 
+0

如果他想保留'TextField'的前一個內容怎麼辦? – Nullpointer

+0

@Nullpointer>他可以將它設置爲一個變量。 – mok

+0

但是他又必須用'(char)2433'添加那個變量的內容,不是嗎? – Nullpointer

1

別不要使用KeyListener。請使用DocumentFilter。當文本被插入到文本字段中時,DocumentFilter被調用。此時,您應該將輸入的字符轉換爲要插入到文檔中的字符,然後調用超級方法。您將需要重寫insertString()和replace()方法。

閱讀關於Implementing a Document Filter的Swing教程的部分以獲取更多信息和示例以開始使用。

+0

這聽起來不錯。此方法可能有效。但是,你能給更多的指點嗎?謝謝。 – user3550680

+0

*「但是,你能給更多的指針嗎?」*我不是這個答案的作者,但我有一個指針給你。瀏覽鏈接的教程。問一個更具體的問題,如果有什麼你不明白的。 –